MapReduce中的最大值如何从中获取其值以及它们代表什么?

时间:2014-03-12 09:35:37

标签: hadoop mapreduce

我试图了解MapReduce如何在后端工作。这段代码为我提供了最多出现的单词,即我的数据集中的'the'。最大值如何工作,它代表什么?

  public static class Reduce extends Reducer<Text, IntWritable, Text, IntWritable> {
  int max =0;
  Text maxWord = new Text();

  public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
      int sum=0;
      for (IntWritable value : values) {
          sum += value.get();
      }

      if(sum > max){
          max = sum;
          maxWord.set(key);
      }           
  }

1 个答案:

答案 0 :(得分:1)

您的问题更多地是关于MapReduce的工作原理,特别是减少的工作原理,首先,我建议您在继续之前阅读教程,例如this one

现在,关于你的问题,我认为只有你有一个减速器才有效。

它的作用是,对于缩减器读取的所有键(即单词),它保持最大出现的键。表示单词的每个键都有一个值列表,我猜测,这些值是由输出(word, 1)对的映射器生成的。因此,减速器的输入是,例如, ("the", <1,1,1,1,1,1,1>) - 如果涉及组合器,这可能会有所不同。

然后,剩下要做的还原剂的总和就是这个列表中的那些,并获得每个单词的总数,例如the --> 7 但是,如果使用更多减速器,每个减速器都会保留一个字,因此您将获得与减速器数量一样多的答案。

max变量,只保留最常用词的出现次数,直到现在。如果另一个单词的出现次数多于max,则它是新的最常用单词。请注意,maxreduce()方法之外初始化,这意味着它的值保留在同一个reducer的下一个键(即单词)中。