below code path are all from sparks' example beside some comments are added by me.
val lines = ctx.textFile(args(0), 1) //-1 generate links of <src,targets> pair var links = lines.map{ s => val parts = s.split("\\s+") (parts(0), parts(1)) //-pair of <src,target> }.distinct() //-needless if dedupliate .groupByKey().cache() //-raw:利用groupby生成一个准备join的表,模拟表数据实际情况; 由于links多次迭代所以要cache提升性能 #B //-leib.如果此行打开,上行也要同时打开否则redueByKey()异常,因为for()中flatMap()会产生(Char,Double) // .partitionBy(new org.apache.spark.HashPartitioner(2)).cache() //-2 generate ranks with default value,ie <spawnup-url,default-rank> //-use val if #A is comment var ranks = links.mapValues(v => 1.0) // ie <raw-links-key,1.0> //-3 for (i <- 1 to iters) { //-3.1 reverse the spawnup urls to target urls:inner join;由于links是url全集可能性能影响大 //- 交换links,ranks是否可以提升性能? no ,this is not leftJoin but inner join // ?links数量太大时,对于后续深迭代计算影响大,可以先利用contribs计算新的links(mapValues())再进行下一次join //-note:both links and ranks rdd are same partitioner,so no shuffle is necessary for join op val contribs = links.join(ranks).values.flatMap{ case (urls, rank) => //-why uses 'case' clause?元组tuple就要用 val size = urls.size //-target(to) urls size urls.map(url => (url, rank / size)) //-avg rank per target url } //-3.2 merge the contributed ranks per target url; 注意:此ranks不断收窄(慢慢远离出发urls),导致要计算的数据越来越少,see #A //-为什么不用恢复到原ranks节点数?若果恢复,统计数据将再恢复为第二次的数据 ranks = contribs.reduceByKey(_ + _).mapValues(0.15 + 0.85 * _) //加权求和; retains same partittoner with join //-#A:若果数量确实庞大,可以使用此方法大约每隔几轮缓存下结果,这样在10轮以上的就快很多了? cmp #B // val oldlinks = links // links = links.join(ranks).map{ case (k,(urls, rank)) => (k,urls)} //-added by leib // oldlinks.unpersist(false) println("step------------------------------"+i+"---------------------------------") ranks.foreach(s => println("-result:" + s._1 + " - " + s._2)) }
ref:
相关推荐
Spark-Core文档是本人经三年总结笔记汇总而来,对于自我学习Spark核心基础知识非常方便,资料中例举完善,内容丰富。具体目录如下: 目录 第一章 Spark简介与计算模型 3 1 What is Spark 3 2 Spark简介 3 3 Spark...
使用Pregel和PageRank算法进行图分析已实施的操作基于图度的社交图中大多数连接的用户。... Spark允许使用两种策略来构建PageRank: dynamically ,此实现使用Pregel接口并运行PageRank until convergence和i
pagerank - 加权PageRank算法Go实现
该库提供15种图形算法:三角形计数(TC),弱集团枚举(WCE),最大集团枚举(MCE),模态,接近度,循环检测(CD),标签传播算法(LPA),Louvin,PageRank,最短-路径,强连接组件(SCC),连接组件(CC),K核...
Topic-sensitive PageRank - a context-sensitive ranking algorithm Taher H. Haveliwala Stanford University
truncated-pagerank 计算源代码 java实现
Perl编写的PageRank算法,同大家分享。
凤凰城和星火的PageRank 尽管Phoenix内置了许多出色的分析实用程序,但是某些任务(例如图形处理)更适合外部引擎(例如Spark的GraphX)。 本示例从Phoenix加载了Stanford Network Analysis Project [1]的Enron电子...
链接分析算法(PageRank,HITS,SimRank)的Python实现
科研论文推荐_论文排序_Pagerank_源码实现及调试
Algorithm-hadoop-pagerank.zip,利用apache hadoop框架的pagerank算法实现,算法是为计算机程序高效、彻底地完成任务而创建的一组详细的准则。
详细介绍了PageRank算法 PageRank算法优缺点 优点: 是一个与查询无关的静态算法,所有网页的PageRank值通过离线计算获得;有效减少在线查询时的计算量,极大降低了查询响应时间。 缺点: 1)人们的查询具有主题...
非常著名的pagerank算法曾经在google使用,奠基的google在搜索王国的地位,本算法是hadoop的实现版本
matlab代码影响Functional-Multiplex-PageRank %++++++++功能复用页面等级++++++++++++++++++++++++++++ 此文件夹包含4个MATLAB代码,用于计算双工网络和任意层数的网络的功能多路复用PageRank: ...
pagerank matlab代码 pagerank-drracket 加微信 qiushiwenmeng
介绍关于google的核心网页搜索算法pagerank的具体内容
C语言并行计算-pageRank算法,使用C语言编写的并行计算pageRank算法代码,可运行。
里面整理了google二位创始人是的有关pagerank博士论文文档,不过是english的,同时给出了到google数据中心查询pagerank的java实现的代码
功能:实现google的PageRank算法,带完整的测试数据和结果,java、scala语言版本 ********************************************************* 版本: scala2.10.4 spark 1.6.1 Scala IDE Build id: 4.4.1-vfinal...
Hadoop (十五)Hadoop-MR编程 -- 【使用hadoop计算网页之间的PageRank值----编程】