Вы говорите, что у вас есть собственный ключ (который реализует WritableComparable), вы переопределили метод hashCode()
?
Если вы используете HashPartitioner (который используется по умолчанию), и не переопределяетеметод hashCode()
в вашем настраиваемом ключе, а затем два идентичных ключа от разных преобразователей, скорее всего, перейдут к разным редукторам (результат hashCode () по модулю с числом редукторов, чтобы определить редуктор для отправки ключа /значение пары к).Это связано с тем, что по умолчанию метод hashCode () является нативным и возвращает адрес в памяти объекта
. Простая реализация hashCode для вашего ключа может быть такой же простой, как сложение хеш-кодов полей кортежей (при условии, что эти поля имеют не собственные реализации hashCode):
public int hashCode() {
return field1.hashCode() + field2.hashCode()
}