Я пытаюсь отказаться от необходимости использования метода setOutputValueGroupingComparator для вторичной сортировки - разве setPartitioner не будет достаточно?
Скажите, что мои входные файлы имеют следующие поля: customerId, orderId, orderDate, orderAmount
Ожидаемый результат - последний заказ для каждого клиента
Я настроил ключевой компаратор, используя setOutputKeyComparatorClass (), который будет сравнивать по customerId asc, orderDate desc
И разделитель, использующий setPartitioner (), который разделит на customerId% numPartition
Вот примеры ключей, которые будут отправлены, если число редукторов равно 2:
key1: { customerId : 1, orderDate : 2012-01-31 } => reducer 1
key2: { customerId : 1, orderDate : 2011-12-31 } => reducer 1
key3: { customerId : 2, orderDate : 2011-12-01 } => reducer 2
key4: { customerId : 3, orderDate : 2012-02-01 } => reducer 1
Мои вопросы:
a) Имеется ли вышеупомянутый разделитель, возможно ли отправлять ключи редуктору 1 в следующем (неправильном) порядке? Здесь клиент 3 перемежается с клиентом 1
key1: { customerId : 1, orderDate : 2012-01-31 } => reducer 1
key4: { customerId : 3, orderDate : 2012-02-01 } => reducer 1
key2: { customerId : 1, orderDate : 2011-12-31 } => reducer 1
b) Если да, то установит ли setOutputValueGroupingComparator (который сравнивает customerId в ключе) это и отправит его в правильном порядке редуктору?
key1: { customerId : 1, orderDate : 2012-01-31 } => reducer 1
key2: { customerId : 1, orderDate : 2011-12-31 } => reducer 1
key4: { customerId : 3, orderDate : 2012-02-01 } => reducer 1
Спасибо
Аджай