我正在尝试在Raw Comparator中实现以下内容,但不确定如何编写它?
这里的tumestamp字段是tyoe LongWritable。
if (this.getNaturalKey().compareTo(o.getNaturalKey()) != 0) {
return this.getNaturalKey().compareTo(o.getNaturalKey());
} else if (this.timeStamp != o.timeStamp) {
return timeStamp.compareTo(o.timeStamp);
} else {
return 0;
}
我在这里找到了一个提示,但不确定如何使用LongWritabel类型实现此处理? http://my.safaribooksonline.com/book/databases/hadoop/9780596521974/serialization/id3548156
感谢您的帮助
答案 0 :(得分:0)
您是否在询问如何比较hadoop提供的LongWritable类型?
如果是,那么答案是使用compare()
方法。有关详细信息,请向下滚动here。
答案 1 :(得分:0)
正确实现RawComparator的最佳方法是扩展WritableComparator并覆盖compare()
方法。 WritableComparator编写得非常好,因此您可以轻松理解它。
答案 2 :(得分:0)
它已经从我在LongWritable
类中看到的内容实现了:
/** A Comparator optimized for LongWritable. */
public static class Comparator extends WritableComparator {
public Comparator() {
super(LongWritable.class);
}
public int compare(byte[] b1, int s1, int l1,
byte[] b2, int s2, int l2) {
long thisValue = readLong(b1, s1);
long thatValue = readLong(b2, s2);
return (thisValue<thatValue ? -1 : (thisValue==thatValue ? 0 : 1));
}
}
该字节比较是RawComparator
的覆盖。