2012-02-21 2 views
2

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

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

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

Привет, Hadoop пришлые

ответ

1

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


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

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

Reduce input groups=146030 

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

... Затем используйте grep или что-то в этом духе, чтобы вытащить его.

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


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

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

+0

Спасибо за ввод. Теперь я использую значение счетчика «уменьшить входные группы». Это можно найти, используя следующий метод экземпляра 'Job' job.getCounters(). FindCounter (" org.apache.hadoop.mapred.Task $ Counter "," REDUCE_INPUT_GROUPS ")'. Im с использованием Hadoop 1.0.0 – roelio

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