首页 > 解决方案 > Spark graphX 从数据框生成 Edge/Vertex RDD

问题描述

我有 2 个大型数据框edgevertex,并且我知道它们需要采用特殊类型VertexEdgeRDD,但是我发现的每个教程都将EdgeVertexRDD 指定为 3 到 10 个项目的数组。我需要他们直接从大量 RDD 转换。如何将数据帧/普通 RDD 更改为正确的类型?

我在这里遵循了这个例子:https ://spark.apache.org/docs/latest/graphx-programming-guide.html#example-property-graph但它列举了所有关系,在我的用例中有很多。

到目前为止我已经尝试过:

val vertex: RDD[(VertexId, String)] = sc.parallelize((vertexDF("ID"), vertexDF("Name")))

返回错误:

error: type mismatch;
 found   : (org.apache.spark.sql.Column, org.apache.spark.sql.Column)
 required: Seq[(org.apache.spark.graphx.VertexId, String)]
    (which expands to)  Seq[(Long, String)]

我如何将数据帧/普通 RDD 更改为专门的顶点/边 RDD 类型?

标签: scalaapache-sparktype-conversionspark-graphx

解决方案


有一个 graphframes spark 库来处理基于数据框的图。它有一种将边和顶点数据帧对转换为 GraphX RDD 的方法。请参阅: http: //graphframes.github.io/graphframes/docs/_site/user-guide.html#example-conversions

对于您的示例,它将如下所示:

val edgeDf = .... // (sourceID, destID, relationship)
val verexDf = .... // (ID, Name)
import org.graphframes._
val g = GraphFrame(
  verexDf.select($"id", $"name"), 
  edgeDf.select ($"sourceID" as "src", $"destID" as "dst", $"relationship"))
// Convert to GraphX
val gx: Graph[Row, Row] = g.toGraphX

推荐阅读