hadoop - 如何与 Pig 中的其他字段一起计数?

标签 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)

感谢所有输入。

干杯

最佳答案

也可以展平分组的投影。

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) 将仅返回 group by 中使用的列,在本例中为 f6。
这种方法的优点是它非常高效,并且需要一个 Map Reduce 作业来执行。任何涉及 JOIN 操作的解决方案都会增加额外的 Map Reduce 作业。

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

关于hadoop - 如何与 Pig 中的其他字段一起计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28327353/

相关文章:

java - 在 Pig 中按名称获取字段?

hadoop - 将值附加到 PIG 变量

python - 适用于 Python 的亚马逊 API 库?

pdf - 裁剪基于文本的多页 PDF 文档的白边并将其转换为基于图像的 PDF 文档

hadoop - 自定义Hadoop Mapper

amazon-web-services - 无法在RStudio中处理大型文件

hadoop - 由于没有减少操作符, reduce task 数设置为 0,hive 作业没有取得进展

hadoop - Hadoop namenode守护程序在5秒后静默停止

hadoop - 在 Apache Pig 中运行 UDF

amazon-web-services - 如何为开发人员创建亚马逊沙盒帐户?