我试图了解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);
}
}
答案 0 :(得分:1)
您的问题更多地是关于MapReduce的工作原理,特别是减少的工作原理,首先,我建议您在继续之前阅读教程,例如this one。
现在,关于你的问题,我认为只有你有一个减速器才有效。
它的作用是,对于缩减器读取的所有键(即单词),它保持最大出现的键。表示单词的每个键都有一个值列表,我猜测,这些值是由输出(word, 1)
对的映射器生成的。因此,减速器的输入是,例如, ("the", <1,1,1,1,1,1,1>)
- 如果涉及组合器,这可能会有所不同。
然后,剩下要做的还原剂的总和就是这个列表中的那些,并获得每个单词的总数,例如the --> 7
但是,如果使用更多减速器,每个减速器都会保留一个字,因此您将获得与减速器数量一样多的答案。
max
变量,只保留最常用词的出现次数,直到现在。如果另一个单词的出现次数多于max
,则它是新的最常用单词。请注意,max
在reduce()
方法之外初始化,这意味着它的值保留在同一个reducer的下一个键(即单词)中。