当我使用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()
我有一张空桌子
答案 0 :(得分: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()辅助函数来构造它们,或从顶点中选择它们。 通常您知道id并使用辅助函数
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,然后在其上插入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)