反向MapReduce命令

时间:2015-12-03 02:46:19

标签: hadoop mapreduce comparator

如果是简单的mapreduce工作,请说wordcount。输出结果排序,是否有任何方式订单将反向出现(以Z开头的单词)或任何其他自定义顺序。

2 个答案:

答案 0 :(得分:0)

看看Koushik, 你可以做得很好,但你需要自定义。为了自定义Key,您需要实现WritableComparable或扩展WritableComparator类,以便分别实现compareTo()或compare()方法。每种方法都有自己的优点和缺点,超出了你的问题,所以我不打算这样做。

来到你的问题。

记住序列化/ Desirialization中的效率考虑因素往往会导致网络开销,我将实现明确排序的compare()方法输出键值按降序排列。以下是您可能希望通过的方法定义

public static class DescendingKey extends WritableComparator {
    protected DescendingKey() {
        super(Text.class, true);
    }

    @SuppressWarnings("rawtypes")
    @Override
    public int compare(WritableComparable w1, WritableComparable w2) {
        LongWritable key1 = (LongWritable) w1;
        LongWritable key2 = (LongWritable) w2;          
        return -1 * key1.compareTo(key2);
    }
} 

这里看看以下'返回'声明

return -1 * key1.compareTo(key2); -1 是唯一一个令牌或说操作数,它实际上有助于将键按降序排序。如果将-1更改为+1,则反向似乎发生,即整个数据按照ascneding顺序排序。如果您觉得答案令人怀疑,请回复我。

谢谢:)

答案 1 :(得分:0)

您可以扩展Text Class并覆盖compare方法。

public class NewText extends Text implements Writable,WritableComparable<BinaryComparable> { 
 @Override
 public int compareTo(BinaryComparable other) {
   return -1 * super.compareTo(other);  //Return inverse value
  }
}