2017-05-12 6 views
3

J'essaie de sortir un sous-graphe en tant que GraphSON dans le shell Gremlin avec JanusGraph.JanusGraph sous-graphique de sortie en tant qu'erreur GraphSON

documentation TinkerPop pour référence: http://tinkerpop.apache.org/docs/current/reference/#graphson-reader-writer

Quand j'écris le graphique complet cela fonctionne bien, cependant, quand je veux écrire un sous-graphe que je l'ai interrogé à l'aide de ces commandes:

gremlin> subGraph = g.V(45240).repeat(__.bothE().subgraph('subGraph').bothV()).times(4).cap('subGraph').next() 

J'utilise la même commande d'écriture:

gremlin> subGraph.io(IoCore.graphson()).writeGraph("45240_sub4.json") 

Je reçois cette erreur:

(was java.lang.IllegalStateException) (through reference chain: org.janusgraph.graphdb.relations.RelationIdentifier["inVertexId"])

autour de la recherche, je trouve un autre thread qui dit que je devais importer un package pour le faire correctement (pour TitanGraph, mais je pensais qu'il s'appliquerait à JanusGraph ainsi): Import package in gremlin

Cependant, chaque fois que je tente d'importer:

gremlin> import com.thinkaurelius.titan.graphdb.tinkerpop.io.graphson.TitanGraphSONModule 

Je reçois cette erreur:

Invalid import definition: 'com.thinkaurelius.titan.graphdb.tinkerpop.io.graphson.TitanGraphSONModule'; reason: startup failed: script1494618250861805544050.groovy: 1: unable to resolve class com.thinkaurelius.titan.graphdb.tinkerpop.io.graphson.TitanGraphSONModule @ line 1, column 1. import com.thinkaurelius.titan.graphdb.tinkerpop.io.graphson.TitanGraphSONModule ^

1 error

Comment puis-je produire un sous-graphe comme un GraphSON dans le shell Gremlin en utilisant JanusGraph?

Répondre

1

Vous avez probablement juste d'importer l'équivalent JanusGraph de ce module de Titan qui devrait être: org.janusgraph.graphdb.tinkerpop.io.graphson.JanusGraphSONModule

Ainsi, cette importation devrait fonctionner:

gremlin> import org.janusgraph.graphdb.tinkerpop.io.graphson.JanusGraphSONModule 
+0

Merci pour votre réponse. J'ai essayé l'importation que vous avez suggérée, mais malheureusement je reçois toujours la même erreur qu'avant: (était java.lang.IllegalStateException) (à travers la chaîne de référence: org.janusgraph.graphdb.relations.RelationIdentifier ["inVertexId"]) – mrosscoe

+0

La réponse de Jason Plurad est probablement le bon. Je viens de remarquer que vous importez un module Titan bien que vous travailliez avec JanusGraph. –

3

Lorsque vous utilisez l'étape subgraph(), le résultat est TinkerGraph, cependant ses identifiants de vertex et edge sont reportés de l'instance JanusGraph. En particulier, les ID de bord sont de type RelationIdentifier qui nécessitent un sérialiseur personnalisé JanusGraph JanusGraphSONModule pour exporter proprement.

Voici un exemple basé hors d'un previous example de Titan, que vous pouvez exécuter dans la console Gremlin:

graph = JanusGraphFactory.open('inmemory') 
graph.io(graphson()).readGraph('data/tinkerpop-modern.json') 
g = graph.traversal() 
subGraph = g.E().hasLabel('knows').subgraph('sg').cap('sg').next() 
graphsonIO = IoCore.graphson().graph(subGraph).registry(JanusGraphIoRegistry.getInstance()).create() 
graphsonIO.writeGraph('/tmp/subgraph.json')