пользовательский подсчет слов с помощью hadoop - PullRequest
2 голосов
/ 04 августа 2010

Я новичок в Hadoop. Я понял программу WordCount. Теперь у меня проблема. Я не хочу вывод всех слов ..

- Words_I_Want.txt -<br> hello<br> echo<br> raj

- Text.txt -<br> hello eveyone. I want hello and echo count


вывод должен быть
hello 2<br> echo 1<br> raj 0


Теперь это был пример. Мои реальные данные очень большие.

Ответы [ 2 ]

2 голосов
/ 04 августа 2010

В примере WordCount , Mapper выводит каждое слово токена из входного значения и числа 1:

while (tokenizer.hasMoreTokens()) {
    word.set(tokenizer.nextToken());
    output.collect(word, one);
}

Если вы хотите считать только определенные слова, не хотите ли вы выводить только слова из вашего Mapper, которые совпадают с вашим списком?

while (tokenizer.hasMoreTokens()) {
    String token = tokenizer.nextToken();
    if (wordsThatYouCareAbout.contains(token)) {
        word.set(token);
        output.collect(word, one);
    }
}
0 голосов
/ 10 августа 2010

Ответ Мэтта b определенно хорош для больших и маленьких объединений, но давайте предположим, что вы делаете соединение от большого к большому.

Вы можете отобразить Words_I_Want.txt: k: слово, v: какой-то маркер

Затем вы можете отобразить Text.txt: k: слово, v: 1 (аналогично стандартному количеству слов)

Вам нужно будет использовать MultipleInputs и выяснить, какой файл является каким, используя conf.get ("map.input.file").

Тогда на шаге уменьшения вы можете собирать выходные данные только тогда, когда у ключа есть маркер.

...