7

目前正在 Disco 上实施 PageRank。作为一种迭代算法,一次迭代的结果被用作下一次迭代的输入。

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

对于 Disco,我将这个文件分成 N 个块,然后运行 ​​MapReduce 一轮。结果,我得到了一组 (page, rank) 元组。

我想将此排名提供给下一次迭代。但是,现在我的映射器需要两个输入:图形文件和页面排名。

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

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

有什么想法吗?

4

1 回答 1

1

看起来您希望在第一次通过时使用 init_map,然后在每次后续迭代中使用 iter_map。

见:http ://discoproject.org/doc/faq.html#id7

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

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

于 2010-09-13T14:15:10.910 回答