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

时间:2010-04-02 11:36:16

标签: python mapreduce disco

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

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

对于Disco,我将此文件分成N个块,然后运行MapReduce一轮。结果,我得到了一组(页面,等级)元组。

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

  1. 我想一起“拉链”     图形文件和页面排名,     这样每条线代表一个     页面,它的排名,它是链接。
  2. 由于此图形文件被分成N个块,我需要将pagerank向量分割为N.     平行的块,并拉链区域     页面向量的向量图     块
  3. 这一切似乎都比必要的复杂,并且作为一个非常简单的操作(使用典型的mapreduce算法),似乎我错过了一些可以真正简化方法的Disco。

    有什么想法吗?

1 个答案:

答案 0 :(得分:1)

看起来你想要为第一遍使用init_map,然后为每次后续迭代使用iter_map。

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

你能输出包含外链的python对象,而不仅仅是(页面,排名)元组吗?

另一种选择是将链接按页面键入(dict,memcache,kyotocabinet等等)并从映射函数中查找它们。如果您正在使用Disco进行链接,我认为您不希望在工作流程中将所有内容压缩在一起。