是否有任何Spark GraphX构造函数具有复制顶点的合并功能

时间:2015-07-02 09:21:47

标签: apache-spark 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)

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

我是否需要使用以下代码创建图表

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)

1 个答案:

答案 0 :(得分:2)

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

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是Long)。