gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:28:29 25 4
gpt4 key购买 nike

我有一个数据框 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com