2017-02-07 6 views
0

Я работаю над Map Сократите проект «как пример подсчета слов» с некоторыми изменениями. В моем случае у меня много файлов, которые будут обрабатываться, если я запускаю программу, Я хочу, чтобы каждая карта была взять один из файлов и обрабатывать отдельно от других «Я хочу, выход для файла независимо от других выходных файлов»Обработка входных файлов в MapReduce отдельно

Я пытаюсь использовать:

Path filesPath = new Path("file1.txt,file2.txt,file3.txt"); 

MultipleInputs.addInputPath(job, filesPath, TextInputFormat.class, Map.class); 

но выход I got - это смешение всех файлов, выпущенных вместе, и i f слово появляется больше, чем файл, он обрабатывается один раз, и это то, чего я не хочу. Я хочу, чтобы количество слов в каждом файле разделялось.

Так как я могу это использовать?

Если я поместил файлы в каталог, он будет обрабатывать независимые?

ответ

0

Это способ сокращения карты Hadoop. Все файлы объединяются вместе, сортируются и по ключевым словам, и все записи с одним и тем же ключом подаются на карту.

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

0

В задаче Карта вы сможете получить имя файла для обрабатываемой записи.

Get File Name in Mapper

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

+0

Отличный ответ. В моем случае я хочу отправить заголовок для каждого файла с его содержимым, поэтому я могу добавить заголовок в качестве имени файла, как то, что вы говорите. Я попробую теперь группировать компаратор, и я надеюсь, что это сработает. Спасибо – user5532529

Смежные вопросы