Hadoop Comparator方法比较不是从复合键类

时间:2015-07-23 03:52:30

标签: java hadoop

我正在从 Hadoop:The Definitive Guide 学习Hadoop。在本书中,有一个次要排序的例子: MaxTemperatureUsingSecondarySort

在此示例中,我添加了课程IntPair(与第4章' 文本对类相同)。我已经在Eclipse中编写了所有代码,当我编写以下代码时:

IntPair.compare(ip1.getFirst(), ip2.getFirst());
return -IntPair.compare(ip1.getSecond(), ip2.getSecond());

然后IntPair.compare导致错误,说比较方法不在IntPair类中。

  1. 我还需要在IntPair类中定义compare方法,如果是,那么比较方法的主体类型是什么?

  2. 由于比较方法是由WritableComparator接口实现的,因此不需要在IntPair类中再次定义主体吗?或者有什么我想念的东西?

1 个答案:

答案 0 :(得分:0)

这是我们在IntPair类中定义比较方法的方法。

public int compare(IntPair tp) {
        int cmp = this.first.compareTo(tp.first);
        if (cmp != 0) {
            return cmp;
        }
        return this.second.compareTo(tp.second);
    }

以下是辅助排序比较器中的比较方法:

public int compare(final WritableComparable firstValue,
            final WritableComparable secondValue) {
        final IntPair ip1 = (IntPair ) firstValue;
        final IntPair ip2 = (IntPair ) secondValue;

        final int cmp = ip1.getFirst().compareTo(ip2.getFirst());
        if (cmp != 0) {
            return cmp;
        }

        return -ip1.getSecond().compareTo(ip2.getSecond()); // reverse
    }