关于此地图的澄清减少字数示例?

Clarification regarding this map reduce word count example?

我正在研究map reduce,想请教一下map reduce的基本字数统计例子。 假设我的文字是

My name is X Y X.

这是地图class,我指的是

  public static class MapClass extends MapReduceBase
implements Mapper<LongWritable, Text, Text, IntWritable> {

private final static IntWritable one = new IntWritable(1);
private Text word = new Text();

public void map(LongWritable key, Text value, 
                OutputCollector<Text, IntWritable> output, 
                Reporter reporter) throws IOException {
  String line = value.toString();
  StringTokenizer itr = new StringTokenizer(line);
  while (itr.hasMoreTokens()) {
    word.set(itr.nextToken());
    output.collect(word, one);
  }
}

}

此 Map 作业处理文本时,结果会变成

My 1
name 1
is 1
X 1
Y 1
X 1     

然后在shuffer和sort之后,所有相同的key会被归为一组,我们可以做最后的加法计算。在此示例中,将添加两个 X。

我的问题是,如果我通过保留单词和计数的地图在地图作业本身中进行加法会怎样。然后迭代地图,并将计数放入输出中。它会对地图减少工作产生影响吗?输出仍然是一样的;但是,这样做会不会更有效率,因为要操作的 shuffle、sort 和 reducer 的条目会更少?

我在地图作业中做加法的想法正确吗?

是的,您应该使地图输出尽可能小。进行初步计数将减少通过系统移动的数据量。请注意,您仍然需要一个 reduce 作业来添加每个单词的计数,您的输入可以在 Y 处拆分,因此两个 "X" 个单词将转到不同的映射器。

此外,您可以为 MapReduce 作业做的另一件提高效率的事情是使用 Combiners。这些是在映射步骤完成后立即在映射器节点上执行的减少步骤。因此,您可以进一步减少 Map 作业的输出。