根据地图计算单个文件中每个段落中的单词数量

时间:2012-10-14 09:17:54

标签: java mapreduce


实际上这是mapreduce程序。这是我简单的wordcount程序:

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


这里我统计一个文件中的单词数。

但是我需要在文件的每个段落中没有单词。我们得到每个段落的数值。现在根据那个号码进行映射。

1 个答案:

答案 0 :(得分:1)

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

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

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