在猪中使用过滤器和分组依据
Posted
技术标签:
【中文标题】在猪中使用过滤器和分组依据【英文标题】:using filter and group by in pig 【发布时间】:2017-02-21 18:50:18 【问题描述】:我是 pig 语法的新手,想知道是否有人可以提供将这段 SQL 代码翻译成 pig 的提示。
SELECT column1, column2, SUM(column3)
FROM table
WHERE column5 = 100
GROUP BY column2;
到目前为止我有:
data = LOAD....etc.
filterColumn = FILTER data BY column5 = 100;
groupColumn = Group filterColumn By column2;
result = foreach groupColumn Generate group, column1, SUM(column3) as sumCol3;
DUMP result;
这不起作用。错误消息是“无法将 org.apache.pig.builtin.SUM 的匹配函数推断为多个匹配或都不匹配。请使用显式强制转换。”
【问题讨论】:
你能分享示例输入和预期输出吗? 【参考方案1】:SUM()
:计算单列包中数值的总和。它期望 bag 作为其输入。所以,FOREACH ... GENERATE
将是,
result = foreach groupColumn Generate group, filterColumn.column1, SUM(filterColumn.column3) as sumCol3;
同样在FILTER
语句中,使用==
来检查相等性
filterColumn = FILTER data BY column5 == 100;
【讨论】:
我忘记指定 SUM 中 column3 的来源。 SUM(filterColumn.column3) @a.m.是的..希望这能解决,请您接受答案!【参考方案2】:可以使用以下猪命令:
test=LOAD '<testdata>' USING PigStorage(',') AS (column1:<datatype>, column2:<datatype>,column3:<datatype>, column5:<datatype>);
A =FILTER test BY column5==100;
B = GROUP A BY column2;
C = FOREACH B GENERATE group, test.column1,test.column2,SUM(test.column3);
dump C;
注意“PigStorage”和“AS”的使用是可选的。
希望这会有所帮助。
【讨论】:
以上是关于在猪中使用过滤器和分组依据的主要内容,如果未能解决你的问题,请参考以下文章