W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
GraphX包括一組圖算法來簡化分析任務(wù)。這些算法包含在org.apache.spark.graphx.lib
包中,可以被直接訪問。
PageRank度量一個圖中每個頂點的重要程度,假定從u到v的一條邊代表v的重要性標(biāo)簽。例如,一個Twitter用戶被許多其它人粉,該用戶排名很高。GraphX帶有靜態(tài)和動態(tài)PageRank的實現(xiàn)方法,這些方法在PageRank object中。靜態(tài)的PageRank運行固定次數(shù)的迭代,而動態(tài)的PageRank一直運行,直到收斂。[GraphOps]()允許直接調(diào)用這些算法作為圖上的方法。
GraphX包含一個我們可以運行PageRank的社交網(wǎng)絡(luò)數(shù)據(jù)集的例子。用戶集在graphx/data/users.txt
中,用戶之間的關(guān)系在graphx/data/followers.txt
中。我們通過下面的方法計算每個用戶的PageRank。
// Load the edges as a graph
val graph = GraphLoader.edgeListFile(sc, "graphx/data/followers.txt")
// Run PageRank
val ranks = graph.pageRank(0.0001).vertices
// Join the ranks with the usernames
val users = sc.textFile("graphx/data/users.txt").map { line =>
val fields = line.split(",")
(fields(0).toLong, fields(1))
}
val ranksByUsername = users.join(ranks).map {
case (id, (username, rank)) => (username, rank)
}
// Print the result
println(ranksByUsername.collect().mkString("\n"))
連通體算法用id標(biāo)注圖中每個連通體,將連通體中序號最小的頂點的id作為連通體的id。例如,在社交網(wǎng)絡(luò)中,連通體可以近似為集群。GraphX在ConnectedComponents object中包含了一個算法的實現(xiàn),我們通過下面的方法計算社交網(wǎng)絡(luò)數(shù)據(jù)集中的連通體。
/ Load the graph as in the PageRank example
val graph = GraphLoader.edgeListFile(sc, "graphx/data/followers.txt")
// Find the connected components
val cc = graph.connectedComponents().vertices
// Join the connected components with the usernames
val users = sc.textFile("graphx/data/users.txt").map { line =>
val fields = line.split(",")
(fields(0).toLong, fields(1))
}
val ccByUsername = users.join(cc).map {
case (id, (username, cc)) => (username, cc)
}
// Print the result
println(ccByUsername.collect().mkString("\n"))
一個頂點有兩個相鄰的頂點以及相鄰頂點之間的邊時,這個頂點是一個三角形的一部分。GraphX在TriangleCount object中實現(xiàn)了一個三角形計數(shù)算法,它計算通過每個頂點的三角形的數(shù)量。需要注意的是,在計算社交網(wǎng)絡(luò)數(shù)據(jù)集的三角形計數(shù)時,TriangleCount
需要邊的方向是規(guī)范的方向(srcId < dstId),并且圖通過Graph.partitionBy
分片過。
// Load the edges in canonical order and partition the graph for triangle count
val graph = GraphLoader.edgeListFile(sc, "graphx/data/followers.txt", true).partitionBy(PartitionStrategy.RandomVertexCut)
// Find the triangle count for each vertex
val triCounts = graph.triangleCount().vertices
// Join the triangle counts with the usernames
val users = sc.textFile("graphx/data/users.txt").map { line =>
val fields = line.split(",")
(fields(0).toLong, fields(1))
}
val triCountByUsername = users.join(triCounts).map { case (id, (username, tc)) =>
(username, tc)
}
// Print the result
println(triCountByUsername.collect().mkString("\n"))
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: