Пользовательские динамические разделы в MapReduce - PullRequest
0 голосов
/ 06 февраля 2019

Я использую MapReduce для обработки моих данных.Мне нужно, чтобы вывод был сохранен под разделами даты.Мой ключ сортировки - строка даты.Теперь, если я переопределю getPartition в своем пользовательском классе разделителя, чтобы вернуть следующее:

return (formattedDate.hashCode() & Integer.MAX_VALUE) % numReduceTasks;

Поскольку, поскольку мы используем хэш и Mod, в некоторых случаях мы возвращаем одно и то же целочисленное значение, например: Допустим, numReduceTasks=100

Now the date 2018-01-20 might have hash value as 101. so 101%100 = 1

Now take other date as 2018-02-20 and might have hash value as 201. so 201%100 = 1 и из-за этого мы заканчиваем тем, что файлы с несколькими датами попадают в раздел с одной датой.что не желательно.Любые указатели о том, как справиться с этим?

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Несколько форматов это решение, которое сработало. Оно также работает с созданием каталогов.В этом мне помогло полное руководство.

Базовый путь, указанный в методе записи () метода MultipleOutputs, интерпретируется относительно выходного каталога, и поскольку он может содержать символы-разделители пути к файлу (/), онВозможно создание подкаталогов произвольной глубины.Например, следующая модификация разделяет данные по станциям и годам так, чтобы данные каждого года содержались в каталоге, названном идентификатором станции (например, 029070-99999 / 1901 / part-r-00000)

0 голосов
/ 07 февраля 2019

Я думаю, что в этом случае вам не следует использовать разделители и несколько редукторов.Если вы не знаете, сколько уникальных дат содержится в наборе данных, вы не сможете установить число редукторов.

Используйте MultipleOutputs вместо того, чтобы отправлять выводы в несколько файлов.(Файлы, а не каталог, хотя).Если вам нужно отправить их по разным каталогам, вы можете выполнить шаг в вызовах драйверов после MR, который будет перебирать выходной каталог и перемещать файлы в каталоги на основе шаблона запуска имени файла, который в этом случае будет значением даты.

Пример использования MO см. this .

Другой вариант - запустить уменьшение карты нормалей, сохранить выходные данные в обычном каталоге o / p, создать поверх него таблицу кустов и выполнить динамическое разбиение для отправки результатов в различные каталоги на основе столбца даты.,

...