在mapper中用文档编号区分字数 - Hadoop?

时间:2014-11-26 21:03:34

标签: r hadoop mapreduce

我在R上写一个mapper函数(使用Rhipe for map-reduce)。 mapper函数应该读取文本文件并创建Corpus。现在,R已经有了一个名为tm的包,它可以进行文本挖掘并创建DocumentMatrix。如果您想了解更多关于`tm'的信息,请查看here

但是在map-reduce中使用这个包的问题是矩阵被转换为列表,并且很难在Reduce中创建一个矩阵,从这个混乱的"列表"。我在 this website 中找到了使用map-reduce创建语料库的算法,但我对如何找到映射器文档的名称或某些唯一标识感到有些困惑。

对于我拥有的196MB文本文件的文件,hadoop产生了4个映射器(blocksize = 64MB)。如何对键值对进行分类,以便映射器将对发送为((words@document),1)。这篇文章很精美地解释了它。但是,我很难理解映射器如何区分它在多个映射器之间读取的文档编号。据我所知,映射器计数器仅适用于相应的映射器。有人关心详细说明,或提供一些关于我应该做什么的建议吗?

1 个答案:

答案 0 :(得分:0)

我想我想出了自己的解决方案。我所做的不是寻找映射器计数而不是寻找映射器计数,而是在每行的末尾添加了一个文本,后跟数字,如“这是一个文本,n:1”。我使用gsub来创建增量。在映射器中,当我读取该行时,我还读取了值n:1。由于每行的n增加,无论哪个映射器正在读取哪一行,它都会得到正确的n值。然后我使用n的值为每行(文档)创建一个新密钥,如((word @ doc = n),1)其中n是每个行号的值