【问题标题】:Using Spark to add Edges gremlin使用 Spark 添加 Edges gremlin
【发布时间】:2019-04-25 07:47:25
【问题描述】:

当我使用 spark 时,我无法挽救我的优势,如下所示: 有关信息,它可以使用 gremlin 控制台节省优势

val graph = DseGraphFrameBuilder.dseGraph("GRAPH_NAME", spark)
graph.V().has("vertex1","field1","value").as("a").V().has("vertex2","field1","value").addE("myEdgeLabel").to("a")

当我尝试时:graph.edges.show() 我得到一张空桌子

【问题讨论】:

    标签: gremlin datastax-enterprise-graph dse-graph-frames


    【解决方案1】:

    addE() 步骤尚未在 DseGraphFrames 中实现,您应该使用 DGF 特定的 updateEdges() 函数。该功能是为批量更新而设计的。它采用带有 DGF 格式新边的 spark 数据帧:

    scala> newEdges.printSchema
    root
     |-- src: string (nullable = false)
     |-- dst: string (nullable = false)
     |-- ~label: string (nullable = true)
    

    src 和 dst 列是编码的顶点 ID。您可以使用 g.idColumn() 辅助函数构建它们或从顶点中选择它们。 通常你知道 ids 并使用辅助函数

    scala>  val df = Seq((1, 2, "myEdgeLabel")).toDF("v1_id", "v2_id", "~label")
    scala> val newEdges=df.select(g.idColumn("vertex2", $"v2_id") as "src", g.idColumn("vertex1", $"v1_id") as "dst", $"~label")
    scala> g.updateEdges(newEdges)
    

    对于您的特定情况,您可以先查询 id,然后根据它们插入。永远不要在生产中这样做,这种方法很慢而且不是散装的。在大图上使用方法#1:

    val dst = g.V.has("vertex1","field1","value").id.first.getString(0)
    val src = g.V.has("vertex2","field1","value").id.first.getString(0)
    val newEdges = Seq((src, dst, "myEdgeLabel")).toDF("src", "dst", "~label")
    g.updateEdges(newEdges)
    

    查看文档:https://docs.datastax.com/en/dse/5.1/dse-dev/datastax_enterprise/graph/graphAnalytics/dseGraphFrameImport.html

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    • 2015-07-06
    • 1970-01-01
    相关资源
    最近更新 更多