91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

spark-shell如何實現PageRank

發布時間:2021-11-15 23:45:59 來源:億速云 閱讀:164 作者:柒染 欄目:云計算

今天就跟大家聊聊有關spark-shell如何實現PageRank,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

talk is cheap, show code

Scala 代碼實現 :

val links = sc.parallelize(Array(
('a', Array('d')), 
('b', Array('a')), 
('c', Array('a', 'b')), 
('d', Array('a', 'c'))))

// 設置各頁面的初始rank值為1.0
// var ranks = links.mapValues(_ => 1.0) 
var ranks = sc.parallelize(Array(
('a', 1.0), 
('b', 1.0), 
('c', 1.0), 
('d', 1.0)))

for(i <- 1 to iterations) {
    val joinRdd = links.join(ranks)
    val contribsRdd = joinRdd.flatMap{
        // 注意這里的links為模式匹配得到的值, 類型為Array[Char], 并非前面的ParallelCollectionRDD
        case(srcURL, (links, rank)) => links.map(destURL => (destURL, rank / links.size))
    }
    // 簡化了的 rank 計算公式, 更新 ranks
    ranks = contribsRdd.reduceByKey(_ + _).mapValues(0.15 + _ * 0.85)
}

代碼分析:

第1次迭代, transform操作, rdd.join(other) , 對 links 和 ranks 這個2個RDD進行連接

joinRdd = links.join(ranks)

結果如下:

res1: Array[(Char, (Array[Char], Double))] = 
    Array((d,(Array(a, c),1.0)), (b,(Array(a),1.0)), (a,(Array(d),1.0)), (c,(Array(a, b),1.0)))

第1次迭代, transform操作: rdd.flatMap(func) 

contribsRdd = joinRdd.flatMap{

    // 注意這里的links為模式匹配得到的值, 類型為Array[Char], 并非前面的ParallelCollectionRDD

    case(srcURL, (links, rank)) => links.map(destURL => (destURL, rank / links.size))

}

結果如下:

res2: Array[(Char, Double)] = Array((a,0.5), (c,0.5), (a,1.0), (d,1.0), (a,0.5), (b,0.5))

第1次迭代, transform操作:  rdd.reduceByKey(func) & rdd.mapValues(func)

// 簡化了的 rank 計算公式, 更新 ranks

ranks = contribsRdd.reduceByKey(_ + _).mapValues(0.15 + _ * 0.85)

結果如下:

res3: Array[(Char, Double)] = Array((d,1.0), (b,0.575), (a,1.84999), (c,0.575))

這里有double類型造成的精度丟失, a 頁面的 rank 值應該為 1.85

迭代的結果:

第1次迭代, ranks的結果如下:

res1: Array[(Char, Double)] = Array((d,1.0), (b,0.575), (a,1.84999), (c,0.575))

第2次迭代, ranks的結果如下:

res2: Array[(Char, Double)] = Array((d,1.72249), (b,0.394375), (a,1.308124), (c,0.575))

第3次迭代, ranks的結果如下:

res3: Array[(Char, Double)] = Array((d,1.26190), (b,0.39437), (a,1.46165), (c,0.88206))

...

第21次迭代, ranks的結果如下:

res21: Array[(Char, Double)] = Array((d,1.37039), (b,0.46126), (a,1.43586), (c,0.73247))

第22次迭代, ranks的結果如下:

res22: Array[(Char, Double)] = Array((d,1.37048), (b,0.46130), (a,1.43579), (c,0.73241))

第23次迭代, ranks的結果如下:

res23: Array[(Char, Double)] = Array((d,1.37042), (b,0.46127), (a,1.43583), (c,0.73245))

從上面的迭代結果可以得出, 當迭代到22次時, rank值( 保留小數點后4位 )趨于穩定,

此時的rank值可以作為結果值:

 a : 1.4358    b : 0.4613    c : 0.7325    d : 1.3704

看完上述內容,你們對spark-shell如何實現PageRank有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

原平市| 兴化市| 嘉峪关市| 黄平县| 宁安市| 晋中市| 武山县| 故城县| 綦江县| 乌兰察布市| 杭锦旗| 丰原市| 昌乐县| 东平县| 改则县| 土默特右旗| 兴海县| 莱芜市| 龙川县| 台东县| 平陆县| 松江区| 清丰县| 益阳市| 陵水| 长治市| 普兰店市| 霍州市| 观塘区| 班玛县| 鲁甸县| 洛川县| 京山县| 闽侯县| 宜兰县| 湘潭市| 定兴县| 永福县| 台中县| 漠河县| 万源市|