Gremlin CSV解析创建额外的顶点

时间:2017-10-30 21:00:25

标签: gremlin

我的代码应该读取4列,将它们拆分为前2列的顶点,以及最后两列的边缘属性.CSV文件在37行数据中有33个唯一的顶点。我不明白的是为什么我会得到74个顶点而不是37个边缘。有趣的是,如果我省略addE语句,我只得到37个顶点。

显然,由于我一直在尝试解决当前的问题,因此未包含该属性部分。

1\t2\tstep\tcmp
2\t3\tconductor\tna
3\t4\tswitch\tZ300

\ t表格 等

我的代码是:

graph = TinkerGraph.open()
graph.createIndex('myId', Vertex.class)
g = graph.traversal()
getOrCreate = { myid ->
   p = g.V('myId', myid)
   if (!p.hasNext())
     {g.addV('connector').property('myId',myid) }  
   else
     {p.next()}
}
new File('Continuity.txt').eachLine {
   if (!it.startsWith("#")){
       def row  = it .split('\t')
       def fromVertex = getOrCreate(row[0])
       def toVertex = getOrCreate(row[1])
       g.addE("connection").from(fromVertex).to(toVertex).iterate()  
   }
}

1 个答案:

答案 0 :(得分:2)

我看到的代码至少存在问题。在这一行:

p = g.V('myId', myid)

你告诉gremlin用id找到顶点" myId"无论变量myid的值是多少。你想要:

p = g.V().has('myId', myid)

您使用的语法来自TinkerPop 2.x.我通过这种方式测试了你的代码以及其他一些变化,它现在似乎正常工作:

gremlin> graph = TinkerGraph.open()
==>tinkergraph[vertices:0 edges:0]
gremlin> graph.createIndex('myId', Vertex.class)
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> getOrCreate = { myid ->
......1>    if (!g.V().has('myId', myid).hasNext())
......2>      g.addV('connector').property('myId',myid)
......3>    else
......4>      g.V().has('myId', myid)
......5> }
==>groovysh_evaluate$_run_closure1@29d37757
gremlin> g.addE('connection').from(getOrCreate(1)).to(getOrCreate(2)).iterate()
gremlin> g.addE('connection').from(getOrCreate(1)).to(getOrCreate(2)).iterate()
gremlin> g.V()
==>v[0]
==>v[2]
gremlin> g.E()
==>e[4][2-connection->0]
==>e[5][2-connection->0]