Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 反向排序减速机键_Java_Hadoop_Mapreduce - Fatal编程技术网

Java 反向排序减速机键

Java 反向排序减速机键,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,以相反顺序将映射输出键获取到减速器的最佳方法是什么?默认情况下,reducer按键的升序接收所有键。任何帮助或意见都会得到广泛的赞赏 简单地说,在正常情况下,如果贴图发出键1、4、3、5、2,则reducer将收到与键1、2、3、4、5相同的结果。我希望reducer接收5,4,3,2,1。在Hadoop 1.X中,您可以使用指定自定义比较器类来指定输出 您的比较器必须实现 在Hadoop2.X中,这是通过使用简单的代码来完成的,仍然使用RawComparator的实现 class MyKeyC

以相反顺序将映射输出键获取到减速器的最佳方法是什么?默认情况下,reducer按键的升序接收所有键。任何帮助或意见都会得到广泛的赞赏


简单地说,在正常情况下,如果贴图发出键1、4、3、5、2,则reducer将收到与键1、2、3、4、5相同的结果。我希望reducer接收5,4,3,2,1。在Hadoop 1.X中,您可以使用指定自定义比较器类来指定输出

您的比较器必须实现

在Hadoop2.X中,这是通过使用简单的代码来完成的,仍然使用
RawComparator的实现

class MyKeyComparator extends WritableComparator {
    protected DescendingKeyComparator() {
        super(Text.class, true);
    }

    @SuppressWarnings("rawtypes")
    @Override
    public int compare(WritableComparable w1, WritableComparable w2) {
        Text key1 = (Text) w1;
        Text key2 = (Text) w2;          
        return -1 * key1.compareTo(key2);
    }
}
然后将其添加到作业中

job.setSortComparatorClass(MyKeyComparator.class);
您可以根据您的使用更改以下文本类型

Text key1 = (Text) w1;
Text key2 = (Text) w2; 

在从映射器发出密钥之前,可以将其乘以-1。这将导致框架按升序对其排序,但负值-5,-4,-3,-2,-1,然后在减数器中再次将其乘以-1,得到5,4,3,2,1。这将导致框架按sudo降序排序。在更复杂的排序中,最好编写一个用于比较的自定义类,然后在驱动程序类中设置它

根据@user3123372的答案,您可以扩展Text类并重写compare方法

public class NewText extends Text implements Writable,WritableComparable<BinaryComparable> { 
 @Override
 public int compareTo(BinaryComparable other) {
   return -1 * super.compareTo(other);  //Return inverse value
  }
}
public类NewText扩展文本实现可写、可写可比{
@凌驾
公共整数比较(二进制可比其他){
return-1*super.compareTo(其他);//返回反数值
}
}

使键成为类的对象,该类实现可比接口并根据您的喜好重写compare方法。@Wookai-如果我不太麻烦您,您能建议与新hadoop API中的setOutputKeyComparatorClass等效的键吗?