Spark GraphX圖構造者

2018-11-26 16:36 更新

Spark GraphX圖構造者

GraphX提供了幾種方式從RDD或者磁盤上的頂點和邊集合構造圖。默認情況下,沒有哪個圖構造者為圖的邊重新分區(qū),而是把邊保留在默認的分區(qū)中(例如HDFS中它們的原始塊)。Graph.groupEdges:Graph[VD,ED])需要重新分區(qū)圖,因為它假定相同的邊將會被分配到同一個分區(qū),所以你必須在調用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

它從指定的邊創(chuàng)建一個圖,自動地創(chuàng)建邊提及的所有頂點。所有的頂點和邊的屬性默認都是1。canonicalOrientation參數允許重定向正方向(srcId < dstId)的邊。這在connected components算法中需要用到。minEdgePartitions參數指定生成的邊分區(qū)的最少數量。邊分區(qū)可能比指定的分區(qū)更多,例如,一個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(ClassTag[VD],ClassTag[ED]):Graph[VD,ED])允許從頂點和邊的RDD上創(chuàng)建一個圖。重復的頂點可以任意的選擇其中一個,在邊RDD中而不是在頂點RDD中發(fā)現的頂點分配默認的屬性。

Graph.fromEdges允許僅僅從一個邊RDD上創(chuàng)建一個圖,它自動地創(chuàng)建邊提及的頂點,并分配這些頂點默認的值。

Graph.fromEdgeTuples(ClassTag[VD]):Graph[VD,Int])允許僅僅從一個邊元組組成的RDD上創(chuàng)建一個圖。分配給邊的值為1。它自動地創(chuàng)建邊提及的頂點,并分配這些頂點默認的值。它還支持刪除邊。為了刪除邊,需要傳遞一個PartitionStrategy為值的Some作為uniqueEdges參數(如uniqueEdges = Some(PartitionStrategy.RandomVertexCut))。分配相同的邊到同一個分區(qū)從而使它們可以被刪除,一個分區(qū)策略是必須的。

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號