【问题标题】: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 的匹配函数推断为多个匹配或都不匹配。请使用显式强制转换。”

【问题讨论】:

  • 你能分享示例输入和预期输出吗?

标签: sql apache-pig


【解决方案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”的使用是可选的。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多