【问题标题】:group by multiple files按多个文件分组
【发布时间】:2013-10-18 14:42:45
【问题描述】:

我在很多子目录中有很多文件,所有文件都用逗号分隔。我想按每个文件中的第一个字段分组并运行总记录数

A = LOAD '/files/*' USING PigStorage(',') as (f1, f2, f3, f4, f5);
B = GROUP A ALL;
C = GROUP B BY f1;
D = FOREACH C GENERATE COUNT(f1) ;
DUMP D;

这段代码给了我错误

场投影无效。架构中不存在投影字段 [f1]:group:chararray,A:bag{:tuple(f1:chararray,f2:bytearray,f3:bytearray,f4:bytearray,f5:bytearray)}。

【问题讨论】:

    标签: hadoop apache-pig


    【解决方案1】:

    你不需要GROUP BY ALL

    问题是您正在尝试按 f1 对 B 组进行分组。 f1 在 B 中不存在。

    A = LOAD '/files/*' ...
    B = GROUP A BY f1;
    C = FOREACH B GENERATE COUNT(A);
    DUMP C;
    

    试试看。

    Group by all 仅在您要计算整个数据集时使用。应该非常小心地使用 Group by all,因为如果不小心,所有数据都将在单个 reduce 任务中处理。

    【讨论】:

      【解决方案2】:

      COUNT 函数采用 BAG 的名称而不是字段的名称。应该是:

      D = FOREACH C GENERATE COUNT(B) ;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-19
        • 1970-01-01
        • 2014-07-29
        • 2023-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-27
        相关资源
        最近更新 更多