GraphX中的图构造器
GraphX 提供了几种从 RDD 或磁盘上的顶点和边的集合构建图的方法。 默认情况下,所有图构建器都不会重新划分图的边; 相反,边会留在它们的默认分区中(例如它们在 HDFS 中的原始块)。Graph.groupEdges 要求对图进行重新分区,因为它假定相同的边将位于同一分区上,因此您必须在调用之前调用 Graph.partitionBy 组边。
object GraphLoader { def edgeListFile( sc: SparkContext, path: String, canonicalOrientation: Boolean = false, minEdgePartitions: Int = 1) : Graph[Int, Int] }
GraphLoader.edgeListFile 提供了一种从磁盘上的边列表加载图形的方法。 它解析以下形式的(源顶点 ID,目标顶点 ID)对的邻接列表,跳过以 # 开头的注释行:
# 例如 2 1 4 1 1 2
它从指定的边创建一个 Graph,自动创建边连接提到的任何顶点。 所有顶点和边属性默认为 1。canonicalOrientation 参数允许在正方向 (srcId < dstId) 上重新定向边,这是连通分量算法所要求的。 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 允许仅从边元组的 RDD 创建图,为边分配值 1,并自动创建边提到的任何顶点并为其分配默认值。 它还支持去重边缘; 要进行重复数据删除,请将 PartitionStrategy 的某些部分作为 uniqueEdges 参数传递(例如,uniqueEdges = Some(PartitionStrategy.RandomVertexCut))。 分区策略对于在同一分区上共置相同的边缘是必要的,以便可以对它们进行重复数据删除。