Spark Scala GraphX:创建加权有向图
Spark Scala GraphX: Creating a Weighted Directed Graph
我有一个数据框 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
设置为它们的属性。
假设:
vertex1
、vertex2
和 weight
是 Double
的列;
- 没有顶点的属性信息,所以全部用
0
创建就可以了。
我有一个数据框 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
设置为它们的属性。
假设:
vertex1
、vertex2
和weight
是Double
的列;- 没有顶点的属性信息,所以全部用
0
创建就可以了。