Как генерировать пользовательские имена выходных файлов? - PullRequest
0 голосов
/ 21 декабря 2011

У меня есть сомнения по поводу генерации имени выходного файла.Я использую Hadoop-0.19.2 и у меня есть два входных файла во входной папке (/ data / inp / 20111203_12345, / data / inp / 20111204_12345), и я хотел сгенерировать выходные файлы, соответствующие выходной папке (/ data / out / 20111203_12345)/ part-0000X, / data / out / 20111204_12345 / part-0000x)

Программа Map Reduce вызывается только один раз.

1 Ответ

0 голосов
/ 21 декабря 2011

Поскольку между входными и выходными файлами имеется сопоставление 1-к-1, можно предположить, что нет объединения данных между входными файлами.

1) В маппере выполните некоторую обработку и выведите пары KV в виде filePath / value. Затем все данные для конкретного файла будут отправлены в один картограф. В преобразователе выполните следующее, чтобы получить filePath

void configure(JobConf conf) {
    filePath = conf.get("map.input.file");
}

Обратите внимание, что filePath включает имя входного файла, включая каталог.

2) MultipleOutputformat позволяет записывать данные в несколько файлов, а имя выходного файла может быть получено из выходных пар KV. Ключами для редуктора будут каталог и имя входного файла, которые можно использовать для получения имени выходного файла.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...