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

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

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

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

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

  • 这一切似乎都比必要的要复杂,并且作为一个非常直接的操作(使用典型的mapreduce算法),似乎我缺少有关Disco的某些东西,这些东西可以真正简化该方法。

    有什么想法吗?

    最佳答案

    看起来您将要在第一遍使用init_map,然后在随后的每次迭代中使用iter_map。

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

    您是否可以输出包含外链而不是(page,rank)元组的python对象?

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

    关于python - Disco/MapReduce : Using results of previous iteration as input to new iteration,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2566402/

    10-12 19:15