我的代码应该读取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()
}
}
答案 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]