按多个文件分组
Posted
技术标签:
【中文标题】按多个文件分组【英文标题】: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)。
【问题讨论】:
【参考方案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) ;
【讨论】:
以上是关于按多个文件分组的主要内容,如果未能解决你的问题,请参考以下文章