如何在hadoopmapreduce中对结果进行排序并切掉最上面的条目?

vom3gejh  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(331)

我们正在读取一个类似这样的文件。
10036300 2
10034189 5
10035536 1
10035564 3
我们需要做两件事:
1-按右列排序
2-砍掉前三名
所以看起来是这样的:
10034189 5
10035564 3
10036300 2
我该怎么做呢?

6yjfywim

6yjfywim1#

1) 要获得前3个结果,最好在mapper中在一个键下写入所有值:

context.write(NullWritable.get(),value);

在reducer中,只能获取前三个结果,而跳过其他结果。
2) 现在您所要做的就是,它的排序值,请通过“hadoop secondary sort”进行搜索,这里描述了sortcomparator,例如http://www.bigdataspeak.com/2013/02/hadoop-how-to-do-secondary-sort-on_25.html

n3h0vuf2

n3h0vuf22#

只需使用apache pig:

A = load '/your/file/in/hdfs' using PigStorage(' ') as (num1:long, num2:long);
B = order A by num2 desc; 
C = limit B 3;
dump C;

相关问题