這篇文章主要講解了“PageRank怎么使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“PageRank怎么使用”吧!
專注于為中小企業(yè)提供成都網站制作、成都網站建設、外貿營銷網站建設服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)河南免費做網站提供優(yōu)質的服務。我們立足成都,凝聚了一批互聯(lián)網行業(yè)人才,有力地推動了成百上千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網站建設實現規(guī)模擴充和轉變。
PageRank是執(zhí)行多次連接的一個迭代算法,因此它是RDD分區(qū)操作的很好demo,算法維護兩個數據集
package com.sowhat.spark
import org.apache.spark.rdd.RDD
import org.apache.spark.{HashPartitioner, SparkConf, SparkContext}
/**
* links = (pageID,LinkList)
* ranks = (pageID,rank)
**/
object MyPageRank {
def main(args: Array[String]): Unit = {
val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("pagerank")
//創(chuàng)建SparkContext,該對象是提交spark App的入口
val sc = new SparkContext(conf)
val links: RDD[(String, Seq[String])] = sc.objectFile[(String, Seq[String])]("filepwd").partitionBy(new HashPartitioner(100)).persist()
var ranks: RDD[(String, Double)] = links.mapValues(x => 1.0)
for (i <- 0 until 10) {
val totalRDD: RDD[(String, (Seq[String], Double))] = links.join(ranks)
val contributions: RDD[(String, Double)] = totalRDD.flatMap(
{
case (pageID, (links, rank)) => links.map(dest => (dest, rank / links.size))
}
)
ranks = contributions.reduceByKey(_ + _).mapValues(v => 0.15 + 0.85 * v)
}
ranks.saveAsTextFile("ranks")
}
}
算法從ranksRDD的每個元素的值初始化為1.0開始,然后每次迭代都都不斷的更新ranks值,其中主要優(yōu)化部分如下。
建議
:為最大化分區(qū)相關優(yōu)化潛在作用,在無需更改元素鍵的時候盡量使用 mapValues 或 flatMapValues。
本文使用 mdnice 排版
感謝各位的閱讀,以上就是“PageRank怎么使用”的內容了,經過本文的學習后,相信大家對PageRank怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關知識點的文章,歡迎關注!