Skip to content

Latest commit

 

History

History
48 lines (40 loc) · 3.52 KB

File metadata and controls

48 lines (40 loc) · 3.52 KB

圖形建構式

GraphX提供了幾種方式從RDD或是硬碟上的頂點和邊建立圖。在預設情況下,圖形建構式不會為圖的邊重新分割,而是把邊保留在預設的區塊中(例如HDFS的原始區塊)。 Graph.groupEdges要求重新分割圖形,因為它假定相同的邊會被分配到同一個區塊,所以你必須在使用groupEdges前使用Graph.partitionBy

object GraphLoader {
  def edgeListFile(
      sc: SparkContext,
      path: String,
      canonicalOrientation: Boolean = false,
      minEdgePartitions: Int = 1)
    : Graph[Int, Int]
}

GraphLoader.edgeListFile提供了一個從硬碟上邊的清單讀取一個圖形的方式。格式如下面範例(起始頂點ID,目標頂點ID),#表示註解行。

# This is a comment
2 1
4 1
1 2

從指定的邊建立一個圖,自動建立所有邊提及的所有頂點。所有的頂點和邊的屬性預設都是1。canonicalOrientation參數允許重新導向正向(srcId < dstId)的邊。這在connected components演算法中需要用到。minEdgePartitions參數用來規定邊的分區生成的最小數量。邊分區可能比指定的分區還要多。例如,一個HDFS檔案有更多的區塊。

object Graph {
  def apply[VD, ED](
      vertices: RDD[(VertexId, VD)],
      edges: RDD[Edge[ED]],
      defaultVertexAttr: VD = null)
    : Graph[VD, ED]
  def fromEdges[VD, ED](
      edges: RDD[Edge[ED]],
      defaultValue: VD): Graph[VD, ED]
  def fromEdgeTuples[VD](
      rawEdges: RDD[(VertexId, VertexId)],
      defaultValue: VD,
      uniqueEdges: Option[PartitionStrategy] = None): Graph[VD, Int]
}

Graph.apply允許從頂點和邊的RDD上建立一個圖。重複的頂點會被任意地挑出,而只有從邊RDD出來的頂點才會有預設屬性,頂點RDD並不會有。

Graph.fromEdges只允許從一個邊的RDD上建立一個圖,且自動地建立邊提及的頂點,並給予這些頂點預設值。

Graph.fromEdgeTuples只允許一個edge tuple組成的RDD上建立一個圖,並給予邊的值為1。自動地建立邊所提及的頂點,並給予這些頂點預設值。它還支援刪除邊,為了刪除邊,需要傳遞一個PartitionStrategy值為Some作為參數uniqueEdges的值(如uniqueEdges = some(PartitionStrategy.RandomVertexCut)),要刪除同一分區相同的邊,一個分割策略是必須的。