Hadoop Raw比较器

时间:2012-10-11 02:22:44

标签: hadoop mapreduce

我正在尝试在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

感谢您的帮助

3 个答案:

答案 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的覆盖。