Вы можете организовать свою карту / сократить вычисления следующим образом:
Ввод карты: по умолчанию
Вывод карты: "ключ: число, значение: слово"
_ этап сортировки по ключу _
Здесь вам потребуется переопределить сортировщик по умолчанию для сортировки в порядке убывания.
Уменьшить - 1 редуктор
Уменьшить ввод:«ключ: число, значение: слово»
Уменьшить вывод: «ключ: слово, значение: (число, ранг)»
Сохранить глобальный счетчик.Для каждой пары ключ-значение добавьте ранг, увеличив счетчик.
Редактировать : Вот код, отобранный для пользовательского сортировщика-потомка:
public static class IntComparator extends WritableComparator {
public IntComparator() {
super(IntWritable.class);
}
@Override
public int compare(byte[] b1, int s1, int l1,
byte[] b2, int s2, int l2) {
Integer v1 = ByteBuffer.wrap(b1, s1, l1).getInt();
Integer v2 = ByteBuffer.wrap(b2, s2, l2).getInt();
return v1.compareTo(v2) * (-1);
}
}
Don 'не забудьте установить его в качестве компаратора для вашей работы:
job.setSortComparatorClass(IntComparator.class);