实际上这是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);
这里我统计一个文件中的单词数。
但是我需要在文件的每个段落中没有单词。我们得到每个段落的数值。现在根据那个号码进行映射。
答案 0 :(得分:1)
在单个映射器中实际上不可能了解特定行所在的段落。你需要在其他地方放置一些逻辑。
一种方法是编写一个新的InputFormat,它一次不将行而是整个段落传递给映射器。现在,映射器既传递了行的文本又传递了行号。另一种方法将传递整个段落和段落编号。
不太可扩展的方法是在行号和段号之间创建映射。在你的字数映射器中,你可以写出单词,计数和单词所在的行。然后,您可以将这些记录与行到段落映射相结合,以生成每个段落中的单词计数。