Нормальный формат JSON в GraphSON

У меня есть два вопроса:

  1. Где я могу найти базовый формат файла GraphSON, который гарантированно будет успешно загружен консолью gremlin? Я пытаюсь преобразовать JSON (с 10-20 полями) в другой файл, который может запрашивать gremlin, но я не могу найти какую-либо соответствующую информацию о полях, зарезервированных форматом graphson, или о том, как мне следует обрабатывать идентификаторы и т. д. Я экспортировал предоставленный ими современный график, и это даже не допустимый 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}]}}

1 ответ

Решение

Где я могу найти базовый формат файла GraphSON, который гарантированно будет успешно загружен консолью gremlin?

На данный момент существует несколько версий GraphSON. Вы можете получить ссылку в документации Apache TinkerPop IO. Когда вы пишете "успешно загружено консолью gremlin", я предполагаю, что вы имеете в виду GraphSONReader методы, описанные здесь. Таким образом, формат, который вы показываете выше, является одной формой, которую вы можете использовать. Как вы можете видеть, это недопустимый JSON, хотя вы можете собрать читателя / писателя с помощью wrapAdjacencyList опция установлена ​​в true и это даст действительный JSON. Вот пример:

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]

Причина, по которой вы не получаете действительный JSON по умолчанию, заключается в том, что стандартный формат файла GraphSON должен быть разделяемым для Hadoop и других механизмов распределенной обработки. Поэтому он производит одну строку на вершину - StarGraph формат.

Если я могу создать JSON, где я могу указать серверу загрузить его в качестве базового графа при его запуске? В конфигурационном файле или в скрипте?

Сценарий будет работать. как бы gremlin.tinkergraph.graphLocation а также gremlin.tinkergraph.graphFormat Параметры конфигурации на TinkerGraph.

В конечном счете, если у вас уже есть 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]]

Попытка преобразовать это в GraphSON слишком сложна по сравнению с подходом, описанным выше.

Другие вопросы по тегам