Hadoop 字数计算程序的特定字数?

Hadoop 字数计算程序的特定字数?,hadoop,Hadoop,我的wordcount程序正在给我所需的输出文件,其中包含所有单词及其出现的次数。现在,我必须附加这段代码来支持查询,这样,当我输入一个特定的单词时,它就会输出相应的文件名&wordcount程序的输出应该是查询的输入 我在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.invoke)(NativeMethodAccessorImpl.java:57)的org.myorg.invertdindex.main

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


我在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.invoke)(NativeMethodAccessorImpl.java:57)的org.myorg.invertdindex.main(Invertdindex.java:69)处的线程“main”java.lang.ArrayIndexOutOfBoundsException中得到了这些错误(DelegatingMethodAccessorImpl.jav)‌​a:43)在java.lang.reflect.Method.invoke(Method.java:616)在org.apache.hadoop.util.RunJar.main(RunJar.java:156)如果您想在启动作业时将其作为控制台参数输入,并且mapper和reducer都在一个文件中,那么您可以在这个类中创建一个静态字符串:

私有静态字符串myWord;

然后在
main()
方法中初始化它:

myWord=args[2];

并在
map()
方法中使用它,如下所示:

if(myWord.equals(word.toString()) {
    output.collect(word, one);
}
$ 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
这将只从映射器向减速器发射成对,减速器将对其进行汇总。应该可以工作,但我自己没有测试它

@编辑:这太奇怪了。你唯一能尝试的就是做类似的事情

正如您所注意到的(略低于源代码),它们是这样开始的:

if(myWord.equals(word.toString()) {
    output.collect(word, one);
}
$ 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

我猜您可以使用该示例,因为它执行与您想要实现的类似的操作(将某些内容作为参数传递,然后使用它)。您可以检查它们将来自参数的所有数据存储在何处(方法configure())等等。

正如我之前想问的:您想如何输入这个单词?作为控制台中的参数?例如,作为args[2]?或者其他方式?@Zenzen是的,参数选项听起来不错!请帮助我。谢谢,我想我已经接近了。我还需要在main的末尾做任何更改吗?比如FileInputFormat.setInputPaths(conf,new Path(args[0]);FileOutputFormat.setOutputPath(conf,new Path(args[1]));那么我是否也必须为args[2]指定一些内容?不,您提到的行仅用于hadoop,以便他知道从何处获取需要处理的文件以及在何处存储输出。args[2]将只是传递给程序的一个简单命令行参数(紧跟在args[0]和args[1];)之后),它将存储在变量中。“myWord=args[2]”是您需要添加到main()方法中的唯一一行(当然,除非您希望在用户不提供args[2]的情况下实现一些验证)。我在线程“main”中得到这些错误-异常java.lang.ArrayIndexOutOfBoundsException:2位于org.myorg.inversedindex.main(inversedindex.java:69)位于sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)位于sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)位于org.apache.hadoop.util.RunJar.main(RunJar.java:156)的java.lang.reflect.Method.invoke(Method.java:616)我已经在我的原始帖子中修改了上面的程序,让我知道有什么不对吗?你是以单词作为参数开始工作的吗?你使用的确切命令行命令是什么?$javac-Xlint-classpath/home/james/Downloads/hadoop-0.20.203.0/hadoop-core-0.20.203.jar-d doc invertdindex.java$jar-cvf invertdindex.jar-C doc/.bin/hadoop jar inversedindex.jar org.myorg.inversedindex/user/james/input/user/james/output您好