2017-02-21 30 views
0

Я хочу экспортировать подграф в файл json и импортировать его в другой граф. Я попытался следующим образом:Экспорт подграфа (sideeffect) в json-файл и импорт обратно в график

gremlin> subGraph = g.V().has("name","john").outE("has").subgraph("subgraph").cap("subgraph").next() 
==>tinkergraph[vertices:6 edges:5] 

теперь у меня есть вспомогательный объект графа, то я использовал graphson написать этот объект подграфа непосредственно в JSON файл следующим образом:

subGraph.io(GraphSONIo.build()).writeGraph("/tmp/subgraph.json") 

Но я получаю сообщение об ошибке, как это:

(was java.lang.IllegalStateException) (through reference chain: com.thinkaurelius.titan.graphdb.relations.RelationIdentifier["inVertexId"]) 

что это проблема ??

ответ

0

Я думаю, проблема в том, что у вас есть TinkerGraph как ваш подграф, но этот подграф содержит идентификаторы Titan, которые GraphSON не знает, как изначально обрабатывать. Вам необходимо предоставить сериализаторы Titan для GraphSON, чтобы он знал, как бороться с RelationIdentifier. Вы не можете сказать, какая версия Titan вы используете, но я думаю, что этот подход работает независимо от версии:

mapper = GraphSONMapper.build(). 
         addCustomModule(TitanGraphSONModule.getInstance()). 
         create() 
writer = GraphSONWriter.build().mapper(mapper).create() 
os = new FileOutputStream("/tmp/subgraph.json") 
writer.writeGraph(os, subgraph) 
+0

я использую Titan 1.0 и объектный граф является титаном граф с помощью 'графа = TitanFactory.open (» ../ conf/titan-cassandra.properties ")' при создании подграфа с вышеуказанным запросом гремлина он дает объект 'TinkerGraph'? так что мы можем создать подграф как объект графа титана? –

+0

Я пробовал ваш код на gremlin, он дает ошибку для объекта mapper как 'Нет такого свойства: TitanGraphSONModule для класса: groovysh_evaluate' –

+0

Да, подграф - это TinkerGraph в памяти, хотя ваш основной граф - Titan. Как правило, это имеет большой смысл, поскольку вы обычно не хотите сохранять подграф. Я не помню, если вы можете подграфом Titan в 1.0 - я думаю, что это было добавлено как особенность TinkerPop намного позже. Что касается вашей ошибки, я думаю, вам может понадобиться импортировать этот класс в консоль. Здесь вы можете найти имя пакета: https://github.com/thinkaurelius/titan/blob/1.0.0/titan-core/src/ главная/Java/COM/thinkaurelius/титан/graphdb/tinkerpop/И.О./graphson/TitanGraphSONModule.java –