【问题标题】:Spark graphX make Edge/Vertex RDD from dataframeSpark graphX 从数据框生成 Edge/Vertex RDD
【发布时间】:2019-02-11 14:52:48
【问题描述】:

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

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

  • edgedf 有 3 列,(sourceID、destID、relationship)

  • vertexdf 有 2 列(ID、名称)

到目前为止我所尝试的:

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 类型?

【问题讨论】:

    标签: scala apache-spark type-conversion spark-graphx


    【解决方案1】:

    有一个 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
    

    【讨论】:

      猜你喜欢
      • 2018-10-17
      • 1970-01-01
      • 2016-01-16
      • 1970-01-01
      • 2018-03-05
      • 2019-09-03
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      相关资源
      最近更新 更多