通常情况下,Hadoop示例定义了如何对文件或多个文件进行字数统计,字数的结果将来自整个集合!
我希望为每个段落执行 wordcount 并存储在paragh(i)_wordcnt.txt等单独的文件中。
怎么做? (问题是映射器运行整个集合,reducer最终收集输出!
我能做的事情,如果我达到特定的标记写结果! ) 如果是filecontent:
para1
...
para2
...
para3
...
我能看到para2写出parac的wordcount的结果吗?或者如果以其他方式在单独的文件中写每个段落如何做这个序列
loop:
file(i)(parai)->Mapper->Reducer->multipleOutput(output-file(i))->writetofile(i);
i++;
goto loop;
答案 0 :(得分:0)
您需要让RecordReader一次读取一个段落。请参阅此问题:Overriding RecordReader to read Paragraph at once instead of line
答案 1 :(得分:0)
我正在写基本的基础知识,我们可以做到这一点。
我认为我们必须为此过程运行链接映射器和缩减器。
在第一个映射器中,您必须使用RecordReader并将其键设置为整个段落。这样我们就可以获得与你拥有的段数一样多的键。然后你需要将reducer用作identity reducer并再次将reducer的输出设置为一个新的mapper,它将段落作为键。
既然你的新映射器中有段落,你可以根据需要调整着名的word count code。(这里只用VALUES替换KEYS,其余部分都是相同的。)
由于您在reducer中嵌套了mapper,因此在单独的文件中获取段落的字数很容易。
请告诉我方法是否正确。