如何计算 Pig 中其他字段的数量?
How to get count along with rest of the fields in Pig?
我有以下数据集。
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)
感谢所有意见。
干杯
也可以展平分组的投影。
A = LOAD 'file a';
B = GROUP A BY f6;
C = FOREACH B GENERATE FLATTEN(A), COUNT(A) as f6_count;
编辑 1:
关键是使用 FLATTEN(A) 而不是 FLATTEN(group)。
FLATTEN(A) 将生成一个元组,其中包含原始关系中的所有列,并将摆脱包,即使是那些在 group by 语句中未使用的列 (f1, f2, f3, f4, f5, f6).
FLATTEN(group) 将 return 仅在分组依据中使用的列,在本例中为 f6。
这种方法的优点是它非常高效并且需要执行单个 Map Reduce 作业。任何涉及 JOIN 操作的解决方案都会添加额外的 Map Reduce 作业。
作为 pig、hive 和 MR 的一般经验法则,group by 和 join 操作通常作为单独的 MR 作业执行,减少 MR 作业的数量可以提高性能。
我有以下数据集。
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)
感谢所有意见。
干杯
也可以展平分组的投影。
A = LOAD 'file a';
B = GROUP A BY f6;
C = FOREACH B GENERATE FLATTEN(A), COUNT(A) as f6_count;
编辑 1: 关键是使用 FLATTEN(A) 而不是 FLATTEN(group)。
FLATTEN(A) 将生成一个元组,其中包含原始关系中的所有列,并将摆脱包,即使是那些在 group by 语句中未使用的列 (f1, f2, f3, f4, f5, f6).
FLATTEN(group) 将 return 仅在分组依据中使用的列,在本例中为 f6。 这种方法的优点是它非常高效并且需要执行单个 Map Reduce 作业。任何涉及 JOIN 操作的解决方案都会添加额外的 Map Reduce 作业。
作为 pig、hive 和 MR 的一般经验法则,group by 和 join 操作通常作为单独的 MR 作业执行,减少 MR 作业的数量可以提高性能。