如何在使用mapreduce计算pagerank时进行迭代

时间:2012-01-19 11:11:37

标签: mapreduce iteration pagerank

当我尝试使用mapreduce实现PageRank时,我有疑问。 我想引用这里的代码https://stackoverflow.com/a/5029780/1117436来描述问题。

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)

在上面的过程中,显然地图过程输入的第二个参数是url的Out链接,但reduce过程输出的第二个参数似乎是url的In链接。那么这些代码如何迭代地工作呢?

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

更新:我认为这个答案解决了我的问题。 https://stackoverflow.com/a/13568286/1117436

2 个答案:

答案 0 :(得分:1)

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

话虽如此,如果您有兴趣了解如何使用MapReduce实现类似PageRank的内容,请查看:

PageRank.java

中的run()方法开始

如果您有兴趣,可以在这里查看一堆旧的(即2009年)幻灯片:

现在,正如Praveen已经向您建议的那样,使用Pregel克隆(如Apache Giraph)实现/运行PageRank可以获得更多乐趣。

答案 1 :(得分:0)

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

查看可用于图表处理的Apache Giraph。 Giraph基于MR。 GoldenOrb处于初期阶段。另外,看看Apache Hama这是BSP的一个实现,它有自己的计算引擎,不是基于MR的,而是使用HDFS进行存储。哈马也可以used进行图表处理。