按多个文件分组

krugob8w  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(262)

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

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{:元组(f1:chararray,f2:bytearray,f3:bytearray,f4:bytearray,f5:bytearray)}。

f4t66c6m

f4t66c6m1#

你不需要做什么 GROUP BY ALL 问题是你想在f1之前把b分组。b中不存在f1。

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

试试看。
“全部分组”仅在要对整个数据集进行计数时使用。所有分组都应该非常小心地使用,因为如果不小心的话,所有数据都将在一个reduce任务中处理。

jdzmm42g

jdzmm42g2#

计数函数取包的名称,而不是字段的名称。应该是:

D = FOREACH C GENERATE COUNT(B) ;

相关问题