1

示例 1: 这是自定义可写 Q1 的实现但是如果我们想让它成为自定义 writableComparable,怎么办?Ans: 我们需要实现 compareTo() 方法,也是一个 rowComparator 来让它工作得更快。

示例 2: 文本对示例第 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);
}
4

0 回答 0