是否有任何具有重复顶点合并功能的 Spark GraphX 构造函数
Is there any Spark GraphX constructor with merge function for duplicate Vertices
我有一个包含许多重复顶点但具有不同属性(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)
我没有找到任何 public 构造函数或其他东西。
是否需要使用以下代码创建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 是 Long)。
我有一个包含许多重复顶点但具有不同属性(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)
我没有找到任何 public 构造函数或其他东西。
是否需要使用以下代码创建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 是 Long)。