1. 程式人生 > >spark api學習之GraphOps類

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表示統計節點的入度方向的鄰居,所以對於圖的左邊節點的入度方向鄰居數為0

     graph.collectNeighbors(EdgeDirection.In).foreach(println(_))
    

    result:
    在這裡插入圖片描述
    2.edgeDirection.Out表示統計節點的出度方向的鄰居,所以對於圖的右邊節點的出度方向鄰居數為0
    result:
    在這裡插入圖片描述
    3.edgeDirection.Either表示節點的出度和入度方向的鄰居都會統計
    result:
    在這裡插入圖片描述

  • collectNeighborIds(edgeDirection: EdgeDirection): VertexRDD[Array[VertexId]]
    collectNeighborIds是將每一個節點的所有鄰居節點的vertexId聚合成一個數組

  • collectEdges