Запуск в три этапа: documents_counter, skiplist_builder, подставляем полученные константы в index_builder и запускаем его.
hadoop jar {jar} wiki.Runner {input} {output[ignored]}
documents_counter - все очень тупо, подсчет количества документов: {docid, text} -M-> {1, 1} -R-> {documents_count}
skiplist_builder - построение списка игнорируемых слов:
-
{docid, text} -M-> {word, 1} -R-> {word, count} (посчитали)
-
{word, count} -M-> {-count, word} -R-> {word, count} (отсортировали)
После подставляем константы (ничего лучше не придумал, но наверное можно как-то выкрутиться с помощью hdfs)
index_builder - построение индекса
-
{docid, text} -M-> {word@docid, 1} -R-> {word@docid, count} (посчитали вхождения слова в каждый текст)
-
{word@docid, count} -M-> {docid, word@count} -R-> {word@docid, count@total} (посчитали, сколько всего слов в каждом документе)
-
{word@docid, count@total} -M-> {word, docid@count@total} -R-> (word, index} (в редьюсере сначала посчитали количество документов с этим словом, после этого посчитали все метрики и посортировали результаты по убыванию)