-1


其实这是mapreduce程序。这是我的简单字数统计程序:

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


在这里,我计算文件中的单词数。

但是我需要在文件的每个段落中都没有单词..我们得到每个段落的数值。现在地图基于那个没有。

4

1 回答 1

1

在单个映射器中实际上不可能了解特定行所在的段落。您需要将其中的一些逻辑放在其他地方。

一种方法是编写一个新的 InputFormat,它一次将整个段落而不是行传递给映射器。现在映射器同时传递了行的文本和行号。这种另一种方法将传递整个段落和段落编号。

一种可扩展性较低的方法是在行号和段落号之间创建映射。在您的字数映射器中,您可以写出单词、计数和单词所在的行。然后,您可以将这些记录与行到段落的映射结合起来,以生成每个段落中的单词数。

于 2012-10-14T13:15:57.007 回答