普通 JSON 转 GraphSON 格式

Adr*_*Pop 5 javascript json gremlin gremlin-server graphson

我有两个问题:

  1. 我在哪里可以找到 GraphSON 文件的基本格式,保证 gremlin 控制台成功加载?我正在尝试将 JSON(大约有 10-20 个字段)转换为另一个可以由 gremlin 查询的文件,但我实际上无法找到有关 graphson 格式保留的字段的任何相关信息,或者我应该如何处理 ID等等。我导出了他们提供的现代图形,它甚至不是一个有效的 JSON(多个 JSON 根元素),而是一个 JSON 列表 [1] 我还看到了像 outE、inE 这样的字段...创建?

  2. 如果我能够创建 JSON,那么在我启动它时,我应该在哪里告诉服务器将它加载为基础图?在配置文件中还是在脚本中?

谢谢!阿德里安

[1] https://pastebin.com/drwXhg5k

{"id":1,"label":"person","outE":{"created":[{"id":9,"inV":3,"properties":{"weight":0.4}}],"knows":[{"id":7,"inV":2,"properties":{"weight":0.5}},{"id":8,"inV":4,"properties":{"weight":1.0}}]},"properties":{"name":[{"id":0,"value":"marko"}],"age":[{"id":1,"value":29}]}}
{"id":2,"label":"person","inE":{"knows":[{"id":7,"outV":1,"properties":{"weight":0.5}}]},"properties":{"name":[{"id":2,"value":"vadas"}],"age":[{"id":3,"value":27}]}}
{"id":3,"label":"software","inE":{"created":[{"id":9,"outV":1,"properties":{"weight":0.4}},{"id":11,"outV":4,"properties":{"weight":0.4}},{"id":12,"outV":6,"properties":{"weight":0.2}}]},"properties":{"name":[{"id":4,"value":"lop"}],"lang":[{"id":5,"value":"java"}]}}
{"id":4,"label":"person","inE":{"knows":[{"id":8,"outV":1,"properties":{"weight":1.0}}]},"outE":{"created":[{"id":10,"inV":5,"properties":{"weight":1.0}},{"id":11,"inV":3,"properties":{"weight":0.4}}]},"properties":{"name":[{"id":6,"value":"josh"}],"age":[{"id":7,"value":32}]}}
{"id":5,"label":"software","inE":{"created":[{"id":10,"outV":4,"properties":{"weight":1.0}}]},"properties":{"name":[{"id":8,"value":"ripple"}],"lang":[{"id":9,"value":"java"}]}}
{"id":6,"label":"person","outE":{"created":[{"id":12,"inV":3,"properties":{"weight":0.2}}]},"properties":{"name":[{"id":10,"value":"peter"}],"age":[{"id":11,"value":35}]}}
Run Code Online (Sandbox Code Playgroud)

ste*_*tte 5

我在哪里可以找到 GraphSON 文件的基本格式,保证 gremlin 控制台成功加载?

此时有多个版本的 GraphSON。您可以在 Apache TinkerPop IO 文档中获得参考。当您编写“gremlin 控制台成功加载”时,我假设您的意思是使用此处GraphSONReader描述的方法。其中,您上面显示的格式是您可以使用的一种形式。如您所见,它不是有效的 JSON,但您可以使用设置为的选项构建读取器/写入器,它将生成有效的 JSON。下面是一个例子:wrapAdjacencyListtrue

gremlin> graph = TinkerFactory.createModern();
==>tinkergraph[vertices:6 edges:6]
gremlin> writer =  graph.io(IoCore.graphson()).writer().wrapAdjacencyList(true).create()
==>org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONWriter@24a298a6
gremlin> os = new FileOutputStream('wrapped-adjacency-list.json')
==>java.io.FileOutputStream@6d3c232f
gremlin> writer.writeGraph(os, graph)
gremlin> os.close()
gremlin> newGraph = TinkerGraph.open()
==>tinkergraph[vertices:0 edges:0]
gremlin> ins = new FileInputStream('wrapped-adjacency-list.json')
==>java.io.FileInputStream@7435a578
gremlin> reader = graph.io(IoCore.graphson()).reader().unwrapAdjacencyList(true).create()
==>org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONReader@63da207f
gremlin> reader.readGraph(ins, newGraph)
gremlin> newGraph
==>tinkergraph[vertices:6 edges:6]
Run Code Online (Sandbox Code Playgroud)

默认情况下您无法获得有效 JSON 的原因是因为 GraphSON 文件的标准格式需要可拆分以供 Hadoop 和其他分布式处理引擎使用。因此,它为每个顶点生成一行 - 一种StarGraph格式。

如果我能够创建 JSON,那么在我启动它时,我应该在哪里告诉服务器将它加载为基础图?在配置文件中还是在脚本中?

脚本会起作用。TinkerGraph 上的gremlin.tinkergraph.graphLocationgremlin.tinkergraph.graphFormat 配置选项也是如此。

但最终,如果您有现有的 JSON 并且您没有加载数千万个图形元素,那么解析它并使用标准g.addV()g.addE()方法来构建图形可能是最简单的:

gremlin> import groovy.json.*
==>org.apache.tinkerpop.gremlin.structure.*,...
gremlin> graph = TinkerGraph.open()
==>tinkergraph[vertices:0 edges:0]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> jsonSlurper = new JsonSlurper()
==>groovy.json.JsonSlurper@53e3a87a
gremlin> object = jsonSlurper.parseText('[{ "name": "John Doe" }, { "name" : "Jane Doe" }]')
==>[name:John Doe]
==>[name:Jane Doe]
gremlin> object.each {g.addV('name',it.name).iterate() }
==>[name:John Doe]
==>[name:Jane Doe]
gremlin> g.V().valueMap()
==>[name:[John Doe]]
==>[name:[Jane Doe]]
Run Code Online (Sandbox Code Playgroud)

与上述方法相比,尝试将其转换为 GraphSON 过于复杂。