如何在Hadoop MapReduce中对结果进行排序并删除顶部条目?

时间:2013-11-05 15:16:50

标签: java hadoop mapreduce hdfs

我们正在从一个看起来像这样的文件中读到。

10036300 2

10034189 5

10035536 1

10035564 3

我们需要做两件事:

1 - 按右栏排序

2 - 砍掉前3名结果

所以它看起来像这样:

10034189 5

10035564 3

10036300 2

我将如何做到这一点?

2 个答案:

答案 0 :(得分:1)

只需使用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;

答案 1 :(得分:1)

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