使用mapreduce计算pagerank时如何迭代

使用mapreduce计算pagerank时如何迭代,mapreduce,iteration,pagerank,Mapreduce,Iteration,Pagerank,当我试图用mapreduce实现PageRank时,我有一些问题。 我想在这里引用代码来描述这个问题 map ((url,PR), out_links) //PR = random at start for link in out_links emit(link, ((PR/size(out_links)), url)) reduce(url, List[(weight, url)): PR =0 for v in weights PR = PR + v Set u

当我试图用mapreduce实现PageRank时,我有一些问题。 我想在这里引用代码来描述这个问题

map ((url,PR), out_links) //PR = random at start
for link in out_links
  emit(link, ((PR/size(out_links)), url))

reduce(url, List[(weight, url)):
   PR =0
   for v in weights
   PR = PR + v
   Set urls = all urls from list

 emit((url, PR), urls)
在上面的过程中,很明显map过程输入的第二个参数是url的外链接,而reduce过程输出的第二个参数似乎是url的内链接。那么这些代码如何迭代工作呢

那么我想问的是如何编写代码使pagerank alrorithm正常工作

更新:我认为这个答案解决了我的问题。

已经有了一些图形处理框架


看看哪个可以用于图形处理。Giraph是基于MR.的,他处于非常早期的阶段。另外,看看哪个是的实现,它有自己的计算引擎,不是基于MR的,而是使用HDFS存储。Hama也可以用于图形处理。

您可以使用MapReduce实现迭代算法,但这可能不是最好、更有效的方法(因为每次迭代都会将内容移动到HDFS/磁盘)

话虽如此,如果您有兴趣了解如何使用MapReduce实现PageRank之类的功能,请看这里:

从中的run()方法开始

如果您感兴趣,可以在此处查看一组旧的(即2009年)幻灯片:


现在,您可以通过Pregel克隆实现/运行PageRank,就像Praveen已经向您建议的那样。

谢谢您,但我只是想知道如何在PageRank算法中使reduce的输出和map的输入相互匹配。