我的wordcount程序正在给我所需的输出文件,其中包含所有单词及其出现次数。现在,我必须附加此代码以支持查询,这样当我输入特定的单词时,它会输出相应的文件名& wordcount程序的输出应该是查询的输入。
答案 0 :(得分:0)
如果您想在启动作业时将其作为控制台参数输入,并且mapper和reducer都在一个文件中,那么您只需在此类中创建一个静态String:
private static String myWord;
然后在main()
方法中初始化它:
myWord = args[2];
并在您的map()
方法中使用它:
if(myWord.equals(word.toString()) {
output.collect(word, one);
}
这只会从映射器到减速器发出一对,而减速器会将它相加。应该工作,但我没有自己测试。
@Edit:这太奇怪了。您可以尝试(imho)的唯一事情就是做类似于WordCount 2.0 example的事情。
正如您所注意到的(稍微低于源代码),他们会这样开始:
$ bin/hadoop jar /usr/joe/wordcount.jar org.myorg.WordCount -Dwordcount.case.sensitive=true /usr/joe/wordcount/input /usr/joe/wordcount/output -skip /user/joe/wordcount/patterns.txt
您可以将其更改为:
$ bin/hadoop jar InvertedIndex.jar org.myorg.InvertedIndex /user/james/input /user/james/output -word hello
并将我建议的行(myWord = args [2])变为:
for (int i=0; i < args.length; ++i) {
if ("-word".equals(args[i])) {
myWord = args[++i];
}
}
猜猜你可以使用那个例子,因为它做了类似你想要实现的事情(传递一些东西作为参数,然后使用它)。您可以检查它们存储的所有数据来自参数(方法configure())等。