Поскольку между входными и выходными файлами имеется сопоставление 1-к-1, можно предположить, что нет объединения данных между входными файлами.
1) В маппере выполните некоторую обработку и выведите пары KV в виде filePath / value. Затем все данные для конкретного файла будут отправлены в один картограф. В преобразователе выполните следующее, чтобы получить filePath
void configure(JobConf conf) {
filePath = conf.get("map.input.file");
}
Обратите внимание, что filePath включает имя входного файла, включая каталог.
2) MultipleOutputformat позволяет записывать данные в несколько файлов, а имя выходного файла может быть получено из выходных пар KV. Ключами для редуктора будут каталог и имя входного файла, которые можно использовать для получения имени выходного файла.
Используя описанный выше подход, редуктор может стать узким местом, если входной файл большой, поскольку каждый редуктор будет обрабатывать данные из одного файла. Я не мог придумать лучшего способа сделать это:)