前言
本文隸屬于專欄《1000個問題搞定大資料技術體系》,該專欄為筆者原創,參考請注明來源,不足和錯誤之處請在評論區幫忙指出,謝謝!
本專欄目錄結構和參考文獻請見1000個問題搞定大資料技術體系
關聯
Spark RDD 論文詳解(三)Spark 編程介面
正文
簡介
GraphX 提供了靜態和動態 PageRank 的實作方法,這些方法在 PageRank 物件中,
靜態的 PageRank 運行固定次數的迭代,而動態的 PageRank 一直運行直到收斂為止,
資料
GraphX 原始碼中提供了一個運用 PageRank 演算法分析社交網路中各用戶重要性的案例,
社交網路中的用戶資料在 data/graphx/users.txt 中,用戶之間關系資料在 data/graphx/followers.txt 中,
users . txt 內容如下:
1,BarackObama,Barack Obama
2,ladygaga,Goddess of Love
3,jeresig,John Resig
4,justinbieber,Justin Bieber
6,matei_zaharia,Matei Zaharia
7,odersky,Martin Odersky
8,anonsys
followers.txt 內容如下
2 1
4 1
1 2
6 3
7 3
7 6
6 7
3 7
首先以 users.txt 中的用戶作為頂點、 followers.txt 中的關系作為邊集創建圖
然后通過圖直接呼叫 PageRank 演算法計算出每個頂點的 PR 值,即用戶的重要性
最后結合用戶的屬性資訊對結果輸出展示,
代碼
package com.shockang.study.spark.graphx
import org.apache.log4j.{Level, Logger}
import org.apache.spark.graphx.GraphLoader
import org.apache.spark.sql.SparkSession
/**
* 基于社交網路資料集的 PageRank 示例
*/
object PageRankExample {
val FOLLOWERS_PATH = "/Users/shockang/code/spark-examples/data/simple/graphx/followers.txt"
val USERS_PATH = "/Users/shockang/code/spark-examples/data/simple/graphx/users.txt"
def main(args: Array[String]): Unit = {
// 關閉 Spark 內部的日志列印,只關注結果日志
Logger.getLogger("org").setLevel(Level.OFF)
// 創建 SparkSession
val spark = SparkSession
.builder
.appName("PageRankExample")
.master("local[*]")
.getOrCreate()
val sc = spark.sparkContext
// 加載邊作為圖
val graph = GraphLoader.edgeListFile(sc, FOLLOWERS_PATH)
// 運行 PageRank
val ranks = graph.pageRank(0.0001).vertices
// Join ranks with the usernames
val users = sc.textFile(USERS_PATH).map { line =>
val fields = line.split(",")
(fields(0).toLong, fields(1))
}
val ranksByUsername = users.join(ranks).map {
case (id, (username, rank)) => (username, rank)
}
// 列印結果
println(ranksByUsername.collect().mkString("\n"))
spark.stop()
}
}
輸出
(justinbieber,0.15007622780470478)
(matei_zaharia,0.7017164142469724)
(ladygaga,1.3907556008752426)
(BarackObama,1.4596227918476916)
(jeresig,0.9998520559494657)
(odersky,1.2979769092759237)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/394201.html
標籤:其他
