0

我在尝试使用 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 links,而reduce过程输出的第二个参数似乎是url的In links。那么这些代码如何迭代地工作呢?

那我想问的是如何编写代码让pagerank算法正常工作?

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

4

2 回答 2

1

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

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

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

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

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

于 2012-05-14T09:28:17.117 回答
0

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

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

于 2012-01-19T11:32:41.240 回答