按多个文件分组

时间:2013-10-18 14:42:45

标签: hadoop apache-pig

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

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)}。

2 个答案:

答案 0 :(得分:0)

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

D = FOREACH C GENERATE COUNT(B) ;

答案 1 :(得分:0)

您无需执行GROUP BY ALL

问题是你正在尝试通过f1进行GROUP B。 B中不存在f1。

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

试试。

仅在您想要计算整个数据集时使用“全部分组”。应该非常谨慎地使用所有数据组,因为如果不小心,所有数据都将在单个reduce任务中处理。