Spark GraphX圖構(gòu)造者

2018-11-26 16:36 更新

Spark GraphX圖構(gòu)造者

GraphX提供了幾種方式從RDD或者磁盤上的頂點(diǎn)和邊集合構(gòu)造圖。默認(rèn)情況下,沒有哪個(gè)圖構(gòu)造者為圖的邊重新分區(qū),而是把邊保留在默認(rèn)的分區(qū)中(例如HDFS中它們的原始?jí)K)。Graph.groupEdges:Graph[VD,ED])需要重新分區(qū)圖,因?yàn)樗俣ㄏ嗤倪厡?huì)被分配到同一個(gè)分區(qū),所以你必須在調(diào)用groupEdges之前調(diào)用Graph.partitionBy

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

GraphLoader.edgeListFile提供了一個(gè)方式從磁盤上的邊列表中加載一個(gè)圖。它解析如下形式(源頂點(diǎn)ID,目標(biāo)頂點(diǎn)ID)的連接表,跳過以#開頭的注釋行。

# This is a comment
2 1
4 1
1 2

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

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

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

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)