使用Spark添加边gremlin

使用Spark添加边gremlin,gremlin,datastax-enterprise-graph,dse-graph-frames,Gremlin,Datastax Enterprise Graph,Dse Graph Frames,使用spark时,我无法保存我的优势,如下所示: 有关信息,可以使用gremlin控制台保存edge 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

使用spark时,我无法保存我的优势,如下所示: 有关信息,可以使用gremlin控制台保存edge

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
我得到一个空表

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

scala> newEdges.printSchema
root
 |-- src: string (nullable = false)
 |-- dst: string (nullable = false)
 |-- ~label: string (nullable = true)
src和dst列是编码的顶点ID。可以使用g.idColumn辅助函数构造它们,也可以从顶点中选择它们。 通常您知道ID并使用helper函数

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插入base。千万不要在生产中这样做,这种方法是缓慢的,不是批量生产。在大型图上,使用方法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)

请参阅文档:

谢谢Artem,这正是我为解决问题所做的工作。如果您对这个问题有任何想法,您可以看一下吗