2013-10-18 43 views
0

我在许多子目录中有许多文件,所有文件都以逗号分隔。我想通过组第一场中的每个文件并运行记录总数由多个文件组成

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

回答

0

你不需要做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。所有的小组都应该非常小心地使用,因为如果不小心的话,所有的数据将在单个减少任务中处理。

+0

谢谢!那就是诀窍。 – Jimmy

0

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

D = FOREACH C GENERATE COUNT(B) ; 
+0

谢谢你的快速回答,错误信息是在线3 C = ... – Jimmy