2015-09-27 4 views
0

Я новичок в Hadoop и играю с примером WordCount.Фильтрация вывода в hadoop

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

Первое задание для подсчета слов и второго задания для фильтрации слов короче 5 букв?

Или я могу просто написать логику в редуктор, который не записывает слово в файл результата, если есть менее 5 вхождений? Это приведет к недопустимому результату, если есть несколько экземпляров работающего редуктора?

ответ

0

Простой ответ: вам не нужны рабочие места.

Вы можете добиться этого с одного задания. Логика, которую вы описали в последней из проблем, абсолютно верна.

В каркасе MapReduce все данные (значения), связанные с одним ключом, всегда передаются на тот же Reducer. Поэтому даже если несколько редукторов работают для вашей работы, это не повлияет на выход.

PS:

только слова длиннее 5 букв в выводе

Это из второго абзаца вашей проблемы. Я предполагаю, что вы имеете в виду 5 случаев слова, а не длину слова.

Но вам нужны только слова с длиной более 5, которые вы можете фильтровать в Mapper. Таким образом, будет меньше данных для фазы sort-shuffle (сортировка данных и передача по сети) и меньше процесса данных для Reducer.

0

Одной работы MapReduce должно быть достаточно.

Лучшие-практики говорят, что вы должны фильтр и проект данных в картографа, если это возможно.

В вашем случае ваше условие фильтра зависит только от входных данных (символов во входном слове), тогда вы можете фильтровать входные данные на стороне картографа и отправлять только слова редуктора с более чем 5 буквами. Улучшение производительности вашей работы. Не имеет смысла посылать данные редуктору, чтобы его удалить. Хотя он тоже должен работать.

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