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设置为它们的属性。

假设:

  • vertex1vertex2weightDouble 的列;
  • 没有顶点的属性信息,所以全部用0创建就可以了。