如何与pig中的其他字段一起计数?

kx1ctssn  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(389)

我有以下数据集。

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)

有没有更好的方法来实现我的目标?
如果我只是简单地尝试在不展平的情况下获取count,那么字段最终会出现在bag中,但我希望最终输出为tuple。
所以试着把它作为包输出

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

感谢所有的投入。
干杯

8wtpewkr

8wtpewkr1#

也可以展平分组的投影。

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

编辑1:关键是使用展平(a)而不是展平(组)。
flatten(a)将生成一个元组,其中包含原始关系中的所有列,并将除去包,甚至那些没有在groupby语句中使用的(f1、f2、f3、f4、f5、f6)。
展平(group)将只返回group by中使用的列,在本例中为f6。这种方法的优点是非常有效,需要执行一个map reduce作业。任何涉及连接操作的解决方案都会添加额外的map reduce作业。
作为pig、hive和mr的一般经验法则,groupby和join操作通常作为单独的mr作业执行,减少mr作业的数量可以提高性能。

相关问题