У меня есть маппер, который при обработке данных классифицирует вывод на 3 разных типа (тип - это ключ вывода).Моя цель - создать 3 разных файла CSV через редукторы, каждый со всеми данными для одного ключа со строкой заголовка.
Значения ключа могут изменяться и являются текстовыми строками.
Теперьв идеале мне бы хотелось иметь 3 разных редуктора, и каждый редуктор получал бы только один ключ со своим полным списком значений.
За исключением того, что, похоже, это не работает, потому что ключи не отображаются наконкретные редукторы.
Ответ на этот вопрос в других местах заключался в том, чтобы написать собственный класс разделителя, который бы сопоставлял каждое желаемое значение ключа с конкретным редуктором.Это было бы здорово, за исключением того, что мне нужно использовать потоковую передачу с python, и я не могу включить в свою работу пользовательский потоковый файл jar, так что это, кажется, не вариант.
Я вижу в документах hadoop что есть альтернативный класс разделителя, который может разрешить вторичные сортировки, но для меня не сразу очевидно, что возможно, используя разделитель на основе полей по умолчанию или на основе полей ключа, гарантировать, что каждый ключ окажется в своем собственномредуктор без написания java-класса и использования пользовательского потокового фляги.
Любые предложения приветствуются.
Примеры :
mapper output:
csv2 \ tfieldA, fieldB, fieldC csv1 \ tfield1, field2, field3, field4 csv3 \ tfieldRed, fieldGreen ...
проблема состоит в том, что, если у меня есть 3 редуктора, я получаю распределение ключейвот так:
reducer1 reducer2 recuder3
csv1 csv2
csv3
один редуктор получает два разных типа ключей, а один редуктор вообще не получает никаких данных.это потому, что хэш (ключ csv1) mod 3 и хэш (ключ csv2) mod 3 приводят к одному и тому же значению.