apache-spark - 是否有任何带有重复顶点合并功能的 Spark GraphX 构造函数

标签 apache-spark spark-graphx

我有一个包含许多重复顶点的图,但具有不同的属性(长)。


    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)构造函数或其他东西。

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

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

关于apache-spark - 是否有任何带有重复顶点合并功能的 Spark GraphX 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31180571/

相关文章:

apache-spark - Spark : GraphX fails to find connected components in graphs with few edges and long paths

scala - Spark 中的 "error: type mismatch"具有相同的找到和所需的数据类型

将 scala 应用程序提交到独立 Spark 集群时出现 java.lang.ClassNotFoundException

java - 从嵌套的用户定义对象中创建 DataFrame

python - Pyspark 将列除以按另一列分组的小计

scala - 如何在 Scala 中将 RDD 转换为二维数组?

mysql - 使用spark远程mysql数据库访问错误

hadoop - 在HDFS上存储graphx顶点并稍后加载

scala - Cassandra 全表转储到 HDFS

java - 创建数据并将其附加到 Spark graphx java