通常,Hadoop示例定义了如何对一个文件或多个文件进行单词计数,单词计数的结果将来自整个集合!
我希望为每个段落做单词计数,并存储在像段落(i)_wordcnt.txt这样的单独文件中。
怎么做?(问题是映射器运行整个集合和减速机收集输出最后!
我可以这样做,如果我达到一个特定的标记写结果!)输入if filecontent:
para1
...
para2
...
para3
...
我可以像看到para2那样写para1的wordcount结果吗?或者如果其他方式将每个段落写在单独的文件中如何做,像这样的顺序
loop:
file(i)(parai)->Mapper->Reducer->multipleOutput(output-file(i))->writetofile(i);
i++;
goto loop;
您需要让RecordReader每次读取一个段落。重写RecordReader来一次读取段落而不是line
我正在写我们如何做到这一点的基本原理。
我认为在这个过程中我们必须运行链接mapper和reducer。
在第一个映射器中,您必须使用RecordReader并将其键设置为整个段落。这样我们就可以得到尽可能多的键。然后你需要使用减速器作为身份减速器,并再次让减速器的输出到一个新的映射器,将段落作为键。
既然您在新的映射器中有了段落,那么您可以根据需要调整著名的单词计数代码。(只需将这里的键替换为VALUES,其余的都将相同)。
由于您在reducer中嵌套了mapper,因此在单独的文件中获取段落的单词计数将很容易。