Java 使用hadoop自定义字数

Java 使用hadoop自定义字数,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,我是hadoop的初学者。 我理解WordCount程序。现在我有一个问题。我不想要所有单词的输出 -Words\u I\u Want.txt- 你好 回声 raj -Text.txt- 大家好。我想要hello和echo计数 输出应为 你好2 回声1 raj 0 这就是一个例子,我的实际数据非常大 在中,映射器从输入值和数字1输出每个标记化单词: while (tokenizer.hasMoreTokens()) { word.set(tokenizer.nextToken());

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

-Words\u I\u Want.txt-
你好
回声
raj

-Text.txt-
大家好。我想要hello和echo计数


输出应为
你好2
回声1
raj 0


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

在中,
映射器
从输入值和数字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);
    }
}

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

您可以映射Words\u I\u Want.txt: k:这个词,v:一些记号笔

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

您必须使用conf.get(“map.input.file”)来确定哪个文件是哪个文件


在还原步骤中,当密钥有标记时,只能收集输出。< /P>我的数据太大,不能把它看作是你所关心的<代码>字符串;代码>很抱歉没有说清楚,但我假设您将使用某种

集合
集合
,而不是字符串。数据有多大?只要你能在RAM中放入文件
Words\u I\u Want.txt
,这就可以顺利运行。因此在每个
map()
函数中,我必须从
Words\u I\u Want.txt
加载这组单词(假设我能将其放入内存中),并检查
if(wordsthathatyoucareaout.contains(token))
?这个想法看起来很糟糕,因为**我每次都要在
map()
函数中阅读单词\u I\u Want.txt**