gpt4 book ai didi

java - Hadoop二级排序复合键compareTo与Custom Sorter比较实现

转载 作者:行者123 更新时间:2023-12-02 21:30:24 26 4
gpt4 key购买 nike

在Hadoop Secondary排序中,Composite中的代码具有以下方法来比较值,Composite键类实现WritableComparable:

@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;
}

我想知道为什么我们要通过实现 CustomKeyWritableComparable类中对值进行两次比较以进行一次排序,然后再创建一个 CustomSorter类来通过扩展 WritableComparator来对值进行排序。

最佳答案

我不确定您引用的代码来自哪里。

我将尝试以通用方式回答。

这是《 Hadoop最终分类指南》的摘录,

  • 将键组合为自然键和自然值。
  • 排序比较器应按组合键排序,即
    自然键和自然值(value)。
  • 复合键的分区程序和分组比较器应考虑
    仅用于分区和分组的自然键。

  • 对相似的键进行排序时,对它们进行分组非常有效。分组比较器就是为此目的而设计的,它有助于有效地识别相似的键块。

    例:假设您从映射器中得到了以下键(复合键)。

    A,1

    B,2

    A2

    B,3

    分组比较器将对此进行处理,并按如下所示对其进行排序,

    A,1

    A2

    B,2

    B,3

    为了使二级排序起作用,您需要对值部分进行排序。那就是SortingComparator实现的。

    最终输出为(假设您有一个分区程序,该分区程序在组合键的键部分上进行分区)

    A2

    A,1

    B,3

    B,2

    关于java - Hadoop二级排序复合键compareTo与Custom Sorter比较实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34504234/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com