【问题标题】:Count the grouped records in pig query统计 pig 查询中的分组记录
【发布时间】:2015-06-15 12:15:30
【问题描述】:

下面是我的测试数据。

John,q1,Correct
Jack,q1,wrong
John,q2,Correct
Jack,q2,wrong
John,q3,wrong
Jack,q3,Correct
John,q4,wrong
Jack,q4,wrong
John,q5,wrong
Jack,q5,wrong

我想找到类似下面的东西:

John wrong  4
John correct 1
Jack wrong  3
Jack correct 2

我的代码:

data = LOAD '/stackoverflowq4.txt' USING PigStorage(',') AS (
       name:chararray, 
       number:chararray,
       result:chararray);
B = GROUP data by (name,result);

现在输出如下所示:

((John,wrong),{(John,q5,wrong),(John,q4,wrong),(John,q2,wrong),(John,q1,wrong)})
((John,Correct),{(John,q3,Correct)})
((Jack,wrong),{(Jack,q5,wrong),(Jack,q4,wrong),(Jack,q3,wrong)})
((Jack,Correct),{(Jack,q2,Correct),(Jack,q1,Correct)})

我应该如何计算分组记录的数量。

【问题讨论】:

  • 我认为,先数数,再分组。

标签: apache-pig


【解决方案1】:

COUNT 函数将为您提供袋子中的元素数量,这正是您想要的。按userresult 分组后,您最终会得到一个包含每个组合出现次数的包。

因此,您只需添加一行:

data = LOAD '/stackoverflowq4.txt' USING PigStorage(',') AS (
   name:chararray, 
   number:chararray,
   result:chararray);
B = GROUP data by (name,result);
C = foreach B generate FLATTEN(group) as (name,result), COUNT(data) as count;

dump D;
(Jack,wrong,4)
(Jack,Correct,1)
(John,wrong,3)
(John,Correct,2)

FLATTEN(group) 是因为在分组之后,会生成一个包含您分组的元素的元组,并且从您想要的输出的外观来看,您不希望它在元组中,因为输出会像 @ 987654326@.

【讨论】:

    猜你喜欢
    • 2011-03-18
    • 1970-01-01
    • 2022-09-28
    • 2011-07-06
    • 2015-08-14
    • 2012-01-14
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多