是否有任何Spark GraphX构造函数具有用于重复顶点的合并函数



我有一个图,它有许多重复的顶点,但具有不同的属性(Long(。


    val vertices: RDD[(VertexId, Long)] ...
    val edges: RDD[Edge[Long]] ...
    val graph = Graph(vertices, edges, 0L)

默认情况下,GraphX将使用默认函数合并重复的顶点属性

VertexRDD(vertices, edges, defaultVal, (a, b) => a)

所以它取决于顶点的顺序,哪个属性将留在最终的图中。

我想知道有什么方法可以设置这个合并函数吗?例如,因为我需要用以下函数合并重复的顶点

(a,b) => min(a,b)

我没有找到任何公共构造函数或其他东西。

我需要用以下代码创建Graph吗

val edgeRDD = EdgeRDD.fromEdges(edges)(classTag[ED], classTag[VD])
   .withTargetStorageLevel(edgeStorageLevel).cache()
 val vertexRDD = VertexRDD(vertices, edgeRDD, defaultVertexAttr, (a,b)=>min(a,b)) 
   .withTargetStorageLevel(vertexStorageLevel).cache()
 GraphImpl(vertexRDD, edgeRDD)

您已经回答了许多自己的问题,但是,如果您正在寻找一种方法来控制合并,并且仍然使用现有的构造函数,您可以这样做:

val vertices: RDD[(VertexId, Long)] ...
val edges: RDD[Edge[Long]] ...
val mergedVertices = VertexRDD(vertices, edges, default, mergeFun)
val graph = Graph(mergedVertices, edges, 0L)

这是可能的,因为VertexRDD是RDD[(VertexId,VD(]的一个子类(在这种情况下,VD是长的(。

最新更新