Disco/MapReduce:使用先前迭代的结果作为新迭代的输入

muc*_*out 7 python mapreduce disco

目前正在迪斯科实施PageRank.作为迭代算法,一次迭代的结果用作下一次迭代的输入.

我有一个代表所有链接的大文件,每行代表一个页面,行中的值代表它链接的页面.

对于Disco,我将此文件分成N个块,然后运行MapReduce一轮.结果,我获得了一组(页面,排名)元组.

我想把这个等级提供给下一次迭代.但是,现在我的mapper需要两个输入:图形文件和pageranks.

  1. 我想将图形文件和页面排列"压缩"在一起,这样每行代表一个页面,它的排名,以及它的链接.
  2. 由于这个图形文件被分成N个块,我需要将pagerank向量分成N个并行块,并将pagerank向量的区域压缩到图块中

这似乎比必要的更复杂,并且作为一个非常简单的操作(使用典型的mapreduce算法),似乎我错过了一些可以真正简化方法的Disco.

有什么想法吗?

Aar*_*lin 1

看起来您需要在第一次传递中使用 init_map ,然后在后续的每次迭代中使用 iter_map 。

请参阅: http: //discoproject.org/doc/faq.html#id7

你能输出包含外链的 python 对象,而不仅仅是 (page,rank) 元组吗?

另一种选择是在某处(dict、memcache、kyotocabinet 等)按页面键入外链接,然后从映射函数中查找它们。如果您使用 Disco 链接事物,我认为您不会想在工作流程中将事物压缩在一起。