当前正在Disco上实现PageRank。作为一种迭代算法,一次迭代的结果将用作下一次迭代的输入。
我有一个大文件,它代表所有链接,每一行代表一个页面,而行中的值代表它链接到的页面。
对于Disco,我将此文件分成N个块,然后运行MapReduce一轮。结果,我得到了一组(页面,等级)元组。
我想将此排名提供给下一次迭代。但是,现在我的映射器需要两个输入:图形文件和pageranks。
图形文件和页面排名,
这样每行代表一个
页面,它的排名,而且是链接。
并行块,并压缩区域
图的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/