2

多くの重複した頂点を持つグラフがありますが、異なる属性 (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)
4

1 に答える 1

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 です)。

于 2015-07-02T20:50:51.107 に答える