如何在使用mapreduce计算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)

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

那么我想问的是,如何编写代码来使页面排名正常工作?

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

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

话虽如此,如果你有兴趣研究如何使用MapReduce实现PageRank之类的东西,请看这里:

  • https://github.com/castagna/mr-pagerank/

从PageRank.java中的run()方法开始

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

  • https://github.com/castagna/mr-pagerank/blob/master/docs/pagerank-huguk-2009.pdf

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

已经有了几个图形处理框架。

看看ApacheGiraph,它可以用于图形处理。Giraph是以GoldenOrb先生为原型的。另外,看看ApacheHama,它是BSP的一个实现,它有自己的计算引擎,不是基于MR的,而是使用HDFS进行存储。Hama也可以用于图形处理。

相关内容

  • 没有找到相关文章

最新更新