使用Hadoop MapReduce对单词计数进行排序

Ain*_*Ari 10 parallel-processing hadoop mapreduce word-count

我对MapReduce非常陌生,我完成了一个Hadoop字数统计示例.

在该示例中,它生成单词计数的未排序文件(具有键值对).那么是否可以通过将另一个MapReduce任务与前一个任务相结合来按字出现次数对其进行排序?

Bin*_*erd 0

Hadoop MapReduce wordcount 示例的输出按键排序。所以输出应该按字母顺序排列。

使用 Hadoop,您可以创建自己的关键对象来实现接口,WritableComparable从而允许您覆盖该compareTo方法。这允许您控制排序顺序。

要创建按出现次数排序的输出,您可能需要添加另一个 MapReduce 作业来处理第一个作业的输出,正如您所说的那样。第二项工作将非常简单,甚至可能不需要减少阶段。您只需要实现自己的Writable关键对象来包装单词及其频率。自定义可写看起来像这样:

 public class MyWritableComparable implements WritableComparable {
       // Some data
       private int counter;
       private long timestamp;

       public void write(DataOutput out) throws IOException {
         out.writeInt(counter);
         out.writeLong(timestamp);
       }

       public void readFields(DataInput in) throws IOException {
         counter = in.readInt();
         timestamp = in.readLong();
       }

       public int compareTo(MyWritableComparable w) {
         int thisValue = this.value;
         int thatValue = ((IntWritable)o).value;
         return (thisValue < thatValue ? -1 : (thisValue==thatValue ? 0 : 1));
       }
     }
Run Code Online (Sandbox Code Playgroud)

我从这里抓住了这个例子。

您可能也应该重写hashCode,equalstoString