在Reduce之后对输出文件进行排序

时间:2011-05-04 10:20:59

标签: mapreduce

我正在使用mapreduce来计算单词,我希望输出文件将按单词的出现进行排序。例如:

one two two three three three four four four four

输出将是:

four 4
three 3
two 2
one 1

我该怎么做?

2 个答案:

答案 0 :(得分:1)

这样做的一种方法是添加额外的map-reduce步骤,执行“Secondary Sort”。

  1. 地图只是创建用于进行排序的密钥。
  2. 随后的洗牌/排序阶段进行排序。
  3. reducer只输出排序结果。
  4. HTH

答案 1 :(得分:1)

最简单的方法是:

  1. 按照您想要的方式对每个减速机输出进行排序。因此,例如,如果您使用Streaming和Python来运行您的作业,使用Hadoop 0.21.0,您可以将其指定为reducer:-reducer "myReducer.py | sort -k 2 -r"
  2. 在作业完成时合并所有reducer输出文件。由于减速器输出都是排序的,因此基本上只是合并。因此,例如,在您从本地(hadoop dfs -get myWordCountResults/part* ./results/)复制HDFS中的所有文件后,您可以运行sort -m ./results/part* > sortedOutput.txt