2015-07-23 1 views
0

Я изучаю Hadoop от Hadoop: The Definitive Guide. В этой книге есть один пример вторичного рода: MaxTemperatureUsingSecondarySortСравнение метода сравнения Hadoop не вызывает из класса составного ключа

В этом примере я добавил класс IntPair (который так же, как в главе 4 в Текст Пара класс). Я написал весь код в Eclipse, и когда я написал следующий код:

IntPair.compare(ip1.getFirst(), ip2.getFirst()); 
return -IntPair.compare(ip1.getSecond(), ip2.getSecond()); 

затем IntPair.compare вызывает ошибку, говоря, что сравнивать метод не в IntPair классе.

  1. ли мне нужно также определить метод сравнения в IntPair классе, и если это так, то, что будет тип тела метода сравнения?

  2. Поскольку метод сравнения реализован интерфейсом 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 
    } 
Смежные вопросы