scala - Spark 斯卡拉 GraphX : Creating a Weighted Directed Graph

标签 scala apache-spark spark-graphx

我有一个数据框 dfMaster,它有三列,顶点 1、顶点 2、权重。我正在尝试创建一个 GraphX 有向加权图,它具有来自 V1 和 V2 的顶点以及它们之间具有相应权重的边。我可以通过以下方式创建边和顶点 df:

val edgeDF = dfMaster.select($"vertex1", $"vertex2", $"weight").distinct()
val vertexDF = (dfMaster.select("vertex1").toDF().unionAll(DFMaster.select("vertex2").toDF())).distinct()

然后如何将其加载到加权图中?感谢您的帮助。

最佳答案

据我所知,Spark GraphX 目前仅支持从 RDD 创建。可以在以下类中找到可用于图创建的主要方法:

对于您的情况,我建议使用以下代码:

import org.apache.spark.sql.Row
import org.apache.spark.graphx.{Graph, Edge}

val edgeDF = dfMaster.select($"vertex1", $"vertex2", $"weight").distinct()

val edgeRDD = edgeDF.map { 
  case Row(srcId: Double, dstId: Double, wgt: Double) => Edge[Double](srcId.toLong, dstId.toLong, wgt)
}

val graph = Graph.fromEdges[Int, Double](edgesRDD, 0)   

上面的fromEdges 方法从边推断顶点并将0 设置为它们的属性。

假设:

  • vertex1vertex2weightDouble的列;
  • 没有顶点的属性信息,所以如果它们都是用0创建的就可以了。

关于scala - Spark 斯卡拉 GraphX : Creating a Weighted Directed Graph,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37061126/

相关文章:

apache-spark - 如何使用 usingColumns 连接 spark 中的嵌套列

scala - PageRank 使用 GraphX

scala - 在 Spark GraphX 中实现拓扑排序

scala - 如何在编译 Scala 文件之前在 SBT Build.scala 中运行 Scala 代码?

java - 获取高达 100 纳秒的基于时间的 uuid

scala - 如何从 Scala 中的 DataFrame 在 Spark 中创建分布式稀疏矩阵

斯卡拉 Spark : Split collection into several RDD?

scala - "Missing parameter type"in for-comprehension 重载flatMap时

mongodb - 使用 Scala 创建嵌套字段并将数据框存储到 MongoDB?

apache-spark - Graphx可视化