如何计算猪的其他领域?

时间:2015-02-04 17:12:01

标签: hadoop apache-pig amazon

我有以下数据集。

f1,f2,f3,f4,f5,f6

我正在寻找f6以及其他领域的数量。

F1,F2,F3,F4,f5,5

F1,F2,F3,F4,f5,3 ​​

等等。

我尝试了这段代码,但执行

需要很长时间
A = LOAD 'file a'
B = GROUP A BY f6
C = FOREACH B GENERATE FLATTEN (group) as f6, FLATTEN(f1), FLATTEN(f2),FLATTEN(f3),FLATTEN(f4),FLATTEN(f5),COUNT(f6)

有没有更好的方法来实现我想要的目标?

如果我只是尝试在没有展平的情况下进行计数,那么字段最终会出现在包中,但我希望最终输出为元组。

所以尝试这个让我输出为包

C = FOREACH B GENERATE FLATTEN (group) as f6, A.f1,A.f2.A.f3,A.f4,A.f5, COUNT(f6)

赞赏所有输入。

干杯

1 个答案:

答案 0 :(得分:0)

也可以展平分组的投影。

A = LOAD 'file a';
B = GROUP A BY f6;
C = FOREACH B GENERATE FLATTEN(A), COUNT(A) as f6_count;

编辑1: 关键是使用FLATTEN(A)而不是FLATTEN(组)。

FLATTEN(A)将生成一个元组,其中包含原始关系中的所有列,并且将删除该包,即使那些未按组声明使用的那些(f1,f2,f3,f4,f5, F6)。

FLATTEN(组)将仅返回组中使用的列,在本例中为f6。 这种方法的优点在于它非常高效并且需要执行单个Map Reduce作业。任何涉及JOIN操作的解决方案都会增加额外的Map Reduce作业。

作为pig,hive和MR的一般经验法则,group by和join操作通常作为单独的MR Jobs执行,减少MR作业的数量可以提高性能。