使用hadoop自定义单词计数

时间:2010-08-04 13:09:10

标签: java hadoop mapreduce

我是hadoop的初学者。 我已经理解了WordCount程序。现在我有一个问题。我不想要所有单词的输出..

- Words_I_Want.txt -
hello
echo
raj

- Text.txt -
hello eveyone. I want hello and echo count


输出应为
hello 2
echo 1
raj 0


现在这是一个例子,我的实际数据是非常大。

2 个答案:

答案 0 :(得分:2)

WordCount example中,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);
    }
}

答案 1 :(得分:0)

matt b的答案对于大到小的连接肯定是好的,但让我们假设你正在进行大到大的连接。

您可以映射Words_I_Want.txt: k:单词,v:某个标记

然后您可以映射Text.txt: k:单词,v:1(与标准单词计数相同)

你必须使用MultipleInputs并找出使用conf.get(“map.input.file”)的文件。

然后在缩小步骤中,只有当键具有标记时才能收集输出。