我们正在读取一个类似这样的文件。10036300 210034189 510035536 110035564 3我们需要做两件事:1-按右列排序2-砍掉前三名所以看起来是这样的:10034189 510035564 310036300 2我该怎么做呢?
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
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;
2条答案
按热度按时间6yjfywim1#
1) 要获得前3个结果,最好在mapper中在一个键下写入所有值:
在reducer中,只能获取前三个结果,而跳过其他结果。
2) 现在您所要做的就是,它的排序值,请通过“hadoop secondary sort”进行搜索,这里描述了sortcomparator,例如http://www.bigdataspeak.com/2013/02/hadoop-how-to-do-secondary-sort-on_25.html
n3h0vuf22#
只需使用apache pig: