wordcount程序的具体单词?

时间:2012-02-08 23:45:07

标签: hadoop

我的wordcount程序正在给我所需的输出文件,其中包含所有单词及其出现次数。现在,我必须附加此代码以支持查询,这样当我输入特定的单词时,它会输出相应的文件名& wordcount程序的输出应该是查询的输入。

我得到了这些错误 - 线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:2 atg.myorg.InvertedIndex.main(InvertedIndex.java:69)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun位于org的java.lang.reflect.Method.invoke(Method.java:616)的sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.jav a:43)处的.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)。 apache.hadoop.util.RunJar.main(RunJar.java:156)

1 个答案:

答案 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())等。