Java 按长度对单词进行分组的代码

Java 按长度对单词进行分组的代码,java,hadoop,mapreduce,iterator,reducers,Java,Hadoop,Mapreduce,Iterator,Reducers,在MapReduce程序中,Reducer方法将映射器中的输入作为“字”及其长度 ex.input :- Hi -2 how - 3 are -3 you - 3 ? - 1 现在,我需要编写一个减缩器,它通过分组“单词长度”给出一个输出,所有单词根据单词的长度归入一个类别,如下所示 ex. Output :- 1 - [?] 2 - [hi] 3

在MapReduce程序中,Reducer方法将映射器中的输入作为“字”及其长度

 ex.input :-
         Hi -2
         how - 3
         are  -3 
         you - 3 
         ?   - 1
现在,我需要编写一个减缩器,它通过分组“单词长度”给出一个输出,所有单词根据单词的长度归入一个类别,如下所示

ex. Output :-
       1  - [?]
       2  - [hi]
       3  - [how, are, you]
这是我的映射程序:

public void map(LongWritable key, Text values, OutputCollector<Text, IntWritable> Output, Reporter arg3) throws IOException {
    String s = values.toString();

    for (String word : s.split(" ")) {
        if (word.length() > 0 ) {
            Output.collect(new Text(word), new IntWritable(word.length()));
        }

    }
}
public void映射(LongWritable键、文本值、OutputCollector输出、报告器arg3)引发IOException{
字符串s=values.toString();
for(字符串字:s.split(“”){
if(word.length()>0){
collect(新文本(word)、新intwriteable(word.length());
}
}
}

Reduce程序是如何实现的?

如果您想让reducer按长度分组,则必须让映射器将长度作为键,将单词作为值,而不是:

     Hi -2
     how - 3
     are  -3 
     you - 3 
     ?   - 1
散发


然后,您已经有了就绪结果作为减速器的输入。根据使用的系统,您可以一起关闭减速器或使用简单的标识功能。

如果您希望减速器按长度分组,则必须让映射器将长度作为键,将单词作为值,而不是:

     Hi -2
     how - 3
     are  -3 
     you - 3 
     ?   - 1
散发


然后,您已经有了就绪结果作为减速器的输入。根据您使用的系统,您可以一起关闭减速器,也可以使用简单的识别功能。

谢谢,它适合我。如果,我想收集为“Word.length()+同一组单词的总和+所有单词”。例如,“3-5[how,are,you,got,the]”作为reducer的输出。然后,您有一个不同的map reduce问题。一个如上所述,另一个将从映射器发射(长度,1)并减少到(长度,总和)。从我的头脑中,我想不出一个解决方案,它可以在一次运行中解决这两个问题。有趣的是,这些事情是如何坚持的。。。基本上,解决方案相当简单。您可以如上所述进行映射,从(数字,单个单词)减少到(数字,单词列表)并最终发出((数字,单词列表长度),单词列表)。谢谢,这对我有用。如果,我想收集为“Word.length()+同一组单词的总和+所有单词”。例如,“3-5[how,are,you,got,the]”作为reducer的输出。然后,您有一个不同的map reduce问题。一个如上所述,另一个将从映射器发射(长度,1)并减少到(长度,总和)。从我的头脑中,我想不出一个解决方案,它可以在一次运行中解决这两个问题。有趣的是,这些事情是如何坚持的。。。基本上,解决方案相当简单。您可以如上所述进行映射,从(数字,单个单词)减少到(数字,单词列表)并最终发出((数字,单词列表长度),单词列表)。如果您没有任何冒犯的意图,如果您无法设计像MapReduce中那样简单的程序,也许您应该回去阅读一些MapReduce基础知识(例如教程或书籍)。这将为您节省大量时间。如果您无法设计像MapReduce中那样简单的程序,您可能应该回去阅读一些MapReduce基础知识(例如教程或书籍),而无意冒犯。这会节省你很多时间。