我正在从 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
类中。
我还需要在IntPair
类中定义compare方法,如果是,那么比较方法的主体类型是什么?
由于比较方法是由WritableComparator
接口实现的,因此不需要在IntPair
类中再次定义主体吗?或者有什么我想念的东西?
答案 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
}