Получить количество сокращенных входных групп в Hadoop - PullRequest
2 голосов
/ 21 февраля 2012

У меня есть домашнее задание, в котором я должен получить общее количество отдельных слов в определенном документе.

Это очень похоже на пример WordCount, предоставленный Hadoop. Но сейчас я просто хочу общее количество отдельных слов в документе. В выводе консоли число сокращенных групп ввода соответствует общему количеству отдельных слов.

Есть ли простой способ получить это число, даже не сокращая данные. Или Map / Reduce не является способом решения этой проблемы. Цепочка также может быть решением, но поскольку ответ уже предоставлен в консольном выводе задания, мне интересно, не существует ли простого способа получить количество сокращенных групп ввода без выполнения ненужных действий.

Привет, Hadoop новичок

1 Ответ

1 голос
/ 22 февраля 2012

В какой-то момент вы хотите сгруппировать его, потому что нет способа проверить четкость без объединения данных.


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

В выводе вашей консоли ищите «Уменьшить группы ввода =».Это говорит вам, сколько групп получили ваши редукторы.Одна группа отображается на один ключ, что означает, что каждый уникальный ключ представлен один раз.

    Reduce input groups=146030

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

... Затем используйте grep или что-то в этом роде.

Вы также можете запросить статус задания через API в драйвере, если хотите получить значение счетчика.


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

Общий способ подсчета строк состоит в том, чтобы выдать ту же фиктивную строку, что и ключ, и 1 для каждой строки.По сути, ваша функция карты исключительно context.write(dummyText, one).Обязательно используйте комбинатор и установите количество редукторов на 1.

...