【问题标题】:Reducer code for grouping the words by their lenght按长度对单词进行分组的缩减代码
【发布时间】:2016-07-06 18:10:41
【问题描述】:

在 MapReduce 程序中,Reducer 方法将 Mapper 的输入作为“单词”及其长度。

 ex.input :-
         Hi -2
         how - 3
         are  -3 
         you - 3 
         ?   - 1

现在我需要编写一个 Reducer,它通过对“字长”进行分组来提供输出,并且所有单词都根据字长归为一个类别,如下所示

ex. Output :-
       1  - [?]
       2  - [hi]
       3  - [how, are, you]

这是我的 Mapper 程序:

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()));
        }

    }
}

Reduce 程序如何?

【问题讨论】:

  • 无意冒犯,如果你不能设计一个像 MapReduce 那样简单的程序,也许你应该回去阅读一些 MapReduce 基础知识(例如,教程或书籍)。这将为您节省大量时间。

标签: java hadoop mapreduce iterator reducers


【解决方案1】:

如果你希望你的 reducer 按长度分组,你必须让 mapper 发出长度作为键和单词作为值,因此而不是:

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

发射

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

然后,您已经将准备好的结果作为减速器的输入。根据您使用的系统,您可以完全关闭减速器或使用简单的标识函数。

【讨论】:

  • 谢谢,它对我有用。如果,我想收集为 "Word.length() + 同组的单词总和 + 所有单词 " 。前任。 “3 - 5 [how, are, you, got , the]”作为 Reducer 的输出
  • 那么,你有一个不同的 map-reduce 问题。一个如上所述,另一个是从映射器发出 (length,1) 并减少到 (length, sum)。在我的脑海中,我想不出一个可以一次性解决这两个问题的解决方案。
  • 有趣的是这些东西是如何坚持的......基本上,解决方案很简单。您如上所述映射,从 (number, single_word) 减少到 (number, list_of_words) 并最终发出 ((number, list_length), list_of_words)。
猜你喜欢
  • 1970-01-01
  • 2017-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-25
  • 2016-12-07
  • 2021-03-22
  • 1970-01-01
相关资源
最近更新 更多