Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.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 Hadoop二级排序复合键比较与自定义排序器比较实现_Java_Hadoop_Mapreduce_Bigdata_Secondary Sort - Fatal编程技术网

Java Hadoop二级排序复合键比较与自定义排序器比较实现

Java Hadoop二级排序复合键比较与自定义排序器比较实现,java,hadoop,mapreduce,bigdata,secondary-sort,Java,Hadoop,Mapreduce,Bigdata,Secondary Sort,在Hadoop二级排序中,Composite中的代码具有以下比较值的方法,Composite键类实现了writeablecomparable:- @Override public int compareTo(CustomKey o) { int result = firstName.compareTo(o.getFirstName()); log.debug("value is " + result); if (result =

在Hadoop二级排序中,Composite中的代码具有以下比较值的方法,Composite键类实现了
writeablecomparable
:-

@Override
public int compareTo(CustomKey o) {

    int result = firstName.compareTo(o.getFirstName());     
    log.debug("value is " + result);                
    if (result == 0) {
        return lastName.compareTo(o.getLastName());
    }
    return result;
}
在自定义分类器中,我们创建该分类器以执行二次排序,该分类器扩展了
WritableComparator
,代码如下:-

@Override
public int compare(WritableComparable w1, WritableComparable w2) {
    CustomKey key1 = (CustomKey) w1;
    CustomKey key2 = (CustomKey) w2;
    int value = key1.getFirstName().compareTo(key2.getFirstName());
    if (value == 0) {           
        return -key1.getLastName().compareTo(key2.getLastName());       
    }
    return value;
}

我想知道为什么我们通过实现
writeablecomparable
CustomKey
类中比较两次值进行排序,然后我们再次创建一个
CustomSorter
类,通过扩展
writeablecomparator

对值进行排序。我不确定您引用的代码来自何处

我将试着用一般的方式回答这个问题

以下是Hadoop二级排序最终指南的摘录

  • 使关键点成为自然关键点和自然值的组合
  • 排序比较器应该按组合键排序,即 自然的关键和自然的价值
  • 复合键的分区和分组比较器应该考虑 只有用于分区和分组的自然键
  • 当对相似的键进行排序时,对它们进行分组将非常有效。分组比较器就是为了这个目的,它有助于有效地识别相似的密钥块

    例如:假设您从映射器中获得以下键(复合键)

    A、 一,

    B、 二,

    A、 二,

    B、 三,

    分组比较器将处理这些数据,并按如下方式对它们进行排序

    A、 一,

    A、 二,

    B、 二,

    B、 三,

    要使二次排序正常工作,需要对值部分进行排序。这就是排序比较器正在实现的功能

    最后的输出是(如果您有一个分区器,它在复合键中的键部分上进行分区)

    A、 二,

    A、 一,

    B、 三,


    B、 2

    只有在2种情况下才需要自定义分拣机方法:1)CustomSorter类中的分拣过程与CompositeKey类中的方法不同2)您希望优先选择CustomSorter类的分拣逻辑。
    如果不满足上述条件,您的CompositeKey类将足以进行排序。

    您可以提供从何处获取此代码的参考信息吗?您好,完整代码如下:-