gpt4 book ai didi

hadoop - 从 pig 身上连续获得最大值

转载 作者:可可西里 更新时间:2023-11-01 15:00:22 25 4
gpt4 key购买 nike

从 pig 身上获得最大值(value):

学生(rollno,标记)

rollno. marks

1 24

2 26

3 50

4 30

5 35

输出要求:最大分数卷号。

输出:3 50

假设A包含student表的值

如何获取rollno。满分

我试过这个:

B = GROUP A BY rollno

C = foreach B generate group , max( A.marks);

但是它导致所有记录都可以在 pig 中帮助我

最佳答案

最易读的方法是ORDER您的数据,然后选择带有LIMIT 1的顶部记录:

A = LOAD 'input' AS (rollno, marks);
B = ORDER A BY marks DESC;
C = LIMIT B 1;
DUMP C;

(3,50)

但就 Pig 为完成它而生成的 MapReduce 作业的数量而言,这并不是很有效。您有一个仅限 map 的作业来加载数据,另一个用于对其进行采样(ORDER BY 需要),另一个用于实际进行排序,最后一个用于执行 LIMIT 和输出。这个简单的任务需要 4 个工作。我花了 1:54 来运行这个,几乎所有时间都花在了 MapReduce 开销上。

但是,如果您的输入不是太大,您可以只使用嵌套的 foreach,然后所有工作都将在单个 reducer 中进行,虽然它的可扩展性不高,但比每一步都使用 MapReduce 快得多。首先将所有内容分组到一条记录中,然后使用嵌套的 foreach:

A = LOAD 'tmp/data.txt' AS (rollno, marks);
B = GROUP A ALL;
C = FOREACH B {
ord = ORDER A BY marks DESC;
top = LIMIT ord 1;
GENERATE FLATTEN(top);
};
DUMP C;

(3, 50)

这只使用了一个 MapReduce 作业,耗时 0:35。

当然,如果您的数据足够小以至于 MapReduce 开销很重要,那么 Pig 可能不是您正在做的事情的正确工具。但是,如果您为少量数据生成大量作业,并且确实需要使用 Pig,则值得尝试使用嵌套的 foreach。

关于hadoop - 从 pig 身上连续获得最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15084868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com