spark api學習之GraphOps類
GraphOps類是圖計算領域spark graphx的圖操作類,Graph類例項也能用GraphOps的方法,因為如果Graph類例項要用到GraphOps的方法時jvm會自動將Graph型別隱式轉換成GraphOps型別
來不及解釋了,先建個圖
//定義樣本資料 val rdd = sparkSession.sparkContext.makeRDD(Array( (1, 18), (2, 14), (3, 12), (4, 11), (5, 14), (6, 17), (5, 13), (8, 19), (9, 12), (6, 18) )) //生成邊 val edge = rdd.map(line => { Edge(line._1, line._2, 1L) }) //通過邊構建圖(有向二分圖) val graph = Graph.fromEdges(edge, 0)
生成的圖如下:
-
numEdges:Long
返回圖的邊數量graph.numEdges //10
-
numVertices:Long
返回圖的節點數量graph.numVertices //15
-
inDegrees:VertexRDD[Int]
計算圖的入度,入度是指指向圖右邊每個節點的邊數。返回的型別是VertexRDD,rdd每一行資料型別是(VertexId, Int)。graph.inDegrees.foreach(println(_))
result:
-
outDegrees:VertexRDD[Int]
計算圖的出度,出度是指從圖左邊每個節點出發的邊數。返回的型別是VertexRDD,rdd每一行資料型別是(VertexId, Int)graph.outDegrees.foreach(println(_))
result:
-
degrees:VertexRDD[Int]
計算圖的出度與入度graph.degrees.foreach(println(_))
result:
-
collectNeighborIds(edgeDirection: EdgeDirection):VertexRDD[Array[VertexId]]
將每一個節點的所有鄰居節點的vertexId和屬性值聚合成一個數組。
對於引數edgeDirection,有如下值:
1.edgeDirection.In表示統計節點的入度方向的鄰居,所以對於圖的左邊節點的入度方向鄰居數為0graph.collectNeighbors(EdgeDirection.In).foreach(println(_))
result:
2.edgeDirection.Out表示統計節點的出度方向的鄰居,所以對於圖的右邊節點的出度方向鄰居數為0
result:
3.edgeDirection.Either表示節點的出度和入度方向的鄰居都會統計
result:
-
collectNeighborIds(edgeDirection: EdgeDirection): VertexRDD[Array[VertexId]]
collectNeighborIds是將每一個節點的所有鄰居節點的vertexId聚合成一個數組 -
collectEdges