当我尝试使用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
答案 0 :(得分:1)
您可以使用MapReduce实现迭代算法,但它可能不是最好和更有效的方法(因为您每次迭代都会将内容移动到HDFS /磁盘)。
话虽如此,如果您有兴趣了解如何使用MapReduce实现类似PageRank的内容,请查看:
中的run()方法开始如果您有兴趣,可以在这里查看一堆旧的(即2009年)幻灯片:
现在,正如Praveen已经向您建议的那样,使用Pregel克隆(如Apache Giraph)实现/运行PageRank可以获得更多乐趣。
答案 1 :(得分:0)
已经有一些图形处理框架。
查看可用于图表处理的Apache Giraph。 Giraph基于MR。 GoldenOrb处于初期阶段。另外,看看Apache Hama这是BSP的一个实现,它有自己的计算引擎,不是基于MR的,而是使用HDFS进行存储。哈马也可以used进行图表处理。