hadoop - 如何在 pig 拉丁语中进行分组后排序和限制而不破坏工作

标签 hadoop foreach group-by nested apache-pig

很多时候,我们有兴趣获取一组(在排序依据之后)的顶部或底部,该组在排序之前已按某些键分组。

A = FOREACH data
     GENERATE x,y,z;

B = DISTINCT A;
C = GROUP B BY (x,y) PARALLEL 11;
D = FOREACH C {
              ORDERD = ORDER B BY z DESC;
              FIRST_REC = LIMIT ORDERD 1;
              GENERATE FLATTEN(FIRST_REC) AS (x,y,z);
        };

STORE D INTO 'xyz' USING PigStorage();  

上面的 foreach 生成需要“永远”才能完成,并最终在 12 小时左右后被杀死。 负责此操作的 mapreduce 作业生成了 3 个map、4 个 reducer ,然后 1 个 reducer 仍在处理一整天,并最终因错误 6017(文件错误)而终止。

有没有办法解决这个问题或者有更好的方法来做我想做的事情?

最佳答案

涉及的数据量是多少?您确定您的数据节点足够大以处理那么多数据吗?

如果是这样,我会选择 MAX,而不是订单。这样,只需将一个元组保留在内存中就足够了,因为组已经包含所有其他所需的信息:

D = FOREACH C GENERATE group, MAX (B.z);

关于hadoop - 如何在 pig 拉丁语中进行分组后排序和限制而不破坏工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31591171/

相关文章:

mysql - 如何快速从关系 mysql 表中选择 max(timestamp)

sql - 简单的 sql(我希望!)

java - Hadoop MapReduce 不处理/输出错误?

git - 安全地在 Git 存储库中存储 SSH key 的 Ansible 设计模式?

java - 运行 Hadoop 作业时出现类加载问题

c# - LINQ 查询 Bool+String 对列表。如何在没有 foreach 的情况下连接字符串?

Java 为什么不存在 for (each) 循环的第三种语法?

JavaScript 嵌套元素循环和附加错误?

apache - 在 Windows 上构建 hadoop 2.2

php - 获取每个记录组的最后一条记录