Spark如何實(shí)現(xiàn)PageRank

Spark如何實(shí)現(xiàn)PageRank,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

包河網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,包河網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為包河成百上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的包河做網(wǎng)站的公司定做!

PageRank算法簡(jiǎn)介
PageRank是執(zhí)行多次連接的一個(gè)迭代算法,因此它是RDD分區(qū)操作的一個(gè)很好的用例。算法會(huì)維護(hù)兩個(gè)數(shù)據(jù)集:一個(gè)由(pageID,linkList)的元素組成,包含每個(gè)頁面的相鄰頁面的列表;另一個(gè)由(pageID,rank)元素組成,包含每個(gè)頁面的當(dāng)前排序值。它按如下步驟進(jìn)行計(jì)算。

  1. 將每個(gè)頁面的排序值初始化為1.0。

  2. 在每次迭代中,對(duì)頁面p,向其每個(gè)相鄰頁面(有直接鏈接的頁面)發(fā)送一個(gè)值為rank(p)/numNeighbors(p)的貢獻(xiàn)值。

  3. 將每個(gè)頁面的排序值設(shè)為0.15 + 0.85 * contributionsReceived。

        最后兩個(gè)步驟會(huì)重復(fù)幾個(gè)循環(huán),在此過程中,算法會(huì)逐漸收斂于每個(gè)頁面的實(shí)際PageRank值。在實(shí)際操作中,收斂通常需要大約10輪迭代。

模擬數(shù)據(jù)
假設(shè)一個(gè)由4個(gè)頁面組成的小團(tuán)體:A,B,C和D。相鄰頁面如下所示:
A:B C 
B:A C 
C:A B D 
D:C 

object SparkPageRank {

 def showWarning() {
   System.err.println(
     """WARN: This is a naive implementation of PageRank and is given as an example!
       |Please use the PageRank implementation found in org.apache.spark.graphx.lib.PageRank
       |for more conventional use.
     """.stripMargin)
 }

 def main(args: Array[String]) {
   if (args.length < 1) {
     System.err.println("Usage: SparkPageRank <file> <iter>")
     System.exit(1)
   }

   showWarning()

   val spark = SparkSession
     .builder
     .appName("SparkPageRank")
     .getOrCreate()

   val iters = if (args.length > 1) args(1).toInt else 10
   val lines = spark.read.textFile(args(0)).rdd
   val links = lines.map{ s =>
     val parts = s.split("\\s+")
     (parts(0), parts(1))
   }.distinct().groupByKey().cache()
   var ranks = links.mapValues(v => 1.0)

   for (i <- 1 to iters) {
     val contribs = links.join(ranks).values.flatMap{ case (urls, rank) =>
       val size = urls.size
       urls.map(url => (url, rank / size))
     }
     ranks = contribs.reduceByKey(_ + _).mapValues(0.15 + 0.85 * _)
   }

   val output = ranks.collect()
   output.foreach(tup => println(s"${tup._1} has rank:  ${tup._2} ."))

   spark.stop()
 }
}

看完上述內(nèi)容,你們掌握Spark如何實(shí)現(xiàn)PageRank的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

文章名稱:Spark如何實(shí)現(xiàn)PageRank
URL鏈接:http://muchs.cn/article22/ihsgjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)營銷型網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈虛擬主機(jī)、網(wǎng)站營銷、全網(wǎng)營銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司