Hadoop Custom Key或Custome Writable Comparable

时间:2013-08-27 06:40:47

标签: hadoop mapreduce

示例1: here is an implementation of custom writable Q1但是如果我们想让它成为一个自定义的可写比较器呢? Ans:我们需要实现compareTo()方法,也需要一个rowComparator来使它快速工作。

示例2: Text Pair Example page 104-107

Q2,如果我的自定义对象中有两个以上的文本字段,一个长可写字段,该怎么办? 与示例1 一样,是Comparator.Compare方法的代码段。 这适用于数据类型仅包含两个属性Text

如果自定义数据类型具有两个以上的元素,那么,一个Text,两个IntWaritable,一个BooleanAritable

如何在这种情况下实现rawComparator?

public int compare(byte[] b1, int s1, int l1, 
           byte[] b2, int s2, int l2)   {
  try {
     int firstL1 = WritableUtils.decodeVIntSize(b1[s1]) + readVInt(b1, s1);
     int firstL2 = WritableUtils.decodeVIntSize(b2[s2]) + readVInt(b2, s2);
     int cmp = TEXT_COMPARATOR.compare(b1, s1, firstL1, b2, s2, firstL2);
     if (cmp != 0) {
         return cmp;
      }
  return TEXT_COMPARATOR.compare(b1, s1 + firstL1,
            l1 - firstL1,b2, s2 + firstL2, l2 - firstL2);
  }catch (IOException e) {
    throw new IllegalArgumentException(e);
}

0 个答案:

没有答案