使用Gremlin将Tinkergraph子图导出到文件

使用Gremlin将Tinkergraph子图导出到文件,gremlin,janusgraph,Gremlin,Janusgraph,使用JanusGraph和Gremlin,我有一个图形导出需求,它似乎失败了。从Gremlin控制台,我可以导出我的小图形,包括: g.io('sample.json').write().iterate()成功gis==>graphtraversalsource[standardjanusgraph[berkeleyje:/var/lib/janusgraph/data],标准] 现在我想对一个子图执行同样的操作,因此从gremlin控制台生成一个tingergraph,如下所示: greml

使用JanusGraph和Gremlin,我有一个图形导出需求,它似乎失败了。从Gremlin控制台,我可以导出我的小图形,包括:
g.io('sample.json').write().iterate()
成功
g
is
==>graphtraversalsource[standardjanusgraph[berkeleyje:/var/lib/janusgraph/data],标准]

现在我想对一个子图执行同样的操作,因此从gremlin控制台生成一个tingergraph,如下所示:

gremlin> sn_graph = g.V().hasLabel('rule').repeat(bothE().subgraph('sample').otherV()).times(3).cap('sample').next()
==>tinkergraph[vertices:285 edges:276]
gremlin> sg = sn_graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:285 edges:276], standard]
gremlin> sg.io('/tmp/sample.json').write().iterate()
org.apache.tinkerpop.gremlin.jsr223.console.RemoteException
我希望我能够将我的子图导出到文件,就像我能够导出我的原始图
g
一样。但我总是跑向一个例外。我觉得唯一的区别是一个基于berkeleyje,另一个是tinkergraph

java.lang.IllegalStateException
    at com.google.common.base.Preconditions.checkState(Preconditions.java:158)
    at org.janusgraph.graphdb.relations.RelationIdentifier.getInVertexId(RelationIdentifier.java:83)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.tinkerpop.shaded.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:688)
    at org.apache.tinkerpop.shaded.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:719)
    at org.apache.tinkerpop.shaded.jackson.databind.ser.std.BeanSerializerBase.serializeWithType(BeanSerializerBase.java:604)
    at org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONUtil.writeWithType(GraphSONUtil.java:51)
    at org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONSerializerV2d0.ser(StarGraphGraphSONSerializerV2d0.java:89)
    at org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONSerializerV2d0.serializeWithType(StarGraphGraphSONSerializerV2d0.java:65)
    at org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONSerializerV2d0.serializeWithType(StarGraphGraphSONSerializerV2d0.java:48)
    at org.apache.tinkerpop.shaded.jackson.databind.ser.impl.TypeWrappedSerializer.serialize(TypeWrappedSerializer.java:32)
    at org.apache.tinkerpop.shaded.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480)
    at org.apache.tinkerpop.shaded.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319)
    at org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:3905)
    at org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper.writeValue(ObjectMapper.java:3176)
    at org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONWriter.writeVertex(GraphSONWriter.java:82)
    at org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONWriter.writeVertices(GraphSONWriter.java:110)
    at org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONWriter.writeGraph(GraphSONWriter.java:71)
    at org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.IoStep.write(IoStep.java:121)
    at org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.IoStep.processNextStart(IoStep.java:112)
    at org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep.hasNext(AbstractStep.java:143)
    at org.apache.tinkerpop.gremlin.process.traversal.step.util.ExpandableStepIterator.next(ExpandableStepIterator.java:50)
    at org.apache.tinkerpop.gremlin.process.traversal.step.filter.FilterStep.processNextStart(FilterStep.java:37)
    at org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep.next(AbstractStep.java:128)
    at org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep.next(AbstractStep.java:38)
    at org.apache.tinkerpop.gremlin.process.traversal.Traversal.iterate(Traversal.java:203)
    at org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.iterate(GraphTraversal.java:2862)
    at org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal$Admin.iterate(GraphTraversal.java:187)
    at org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal.iterate(DefaultGraphTraversal.java:48)
    at org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal$Admin$iterate.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:115)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:119)
    at Script205.run(Script205.groovy:1)
    at org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval(GremlinGroovyScriptEngine.java:674)
    at org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval(GremlinGroovyScriptEngine.java:376)
    at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:233)
    at org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor.lambda$eval$0(GremlinExecutor.java:266)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)



我似乎不知道我在这里错过了什么。感谢您的帮助

TinkerGraph包含JanusGraph标识符-
关系标识符-
,GraphSON不知道如何序列化它。您需要提供JanusGraph GraphSON序列化程序,如下所述:

上述方法直接使用
GraphSONWriter
,但您也可以将其交给
io()
步骤,因为您是通过Gremlin控制台发送脚本的:

sg.io('/tmp/sample.json').
     with(IO.registry, JanusGraphIoRegistry.getInstance()).
   write().iterate()

你省略了完整的堆栈跟踪-你能包括所有的吗?嗨,斯蒂芬。谢谢你的光临。我已经用完整的堆栈跟踪更新了这个问题。非常感谢Stephen。我能够使用GraphSONWriter导出。我考虑过序列化问题,但因为我能够顺利导出完整的图,所以我认为子图不会有问题。这是因为我的初始g是
graphtraversalsource[standardjanusgraph..]
的实例,而子图是TinkerGraph的实例吗?另外,对于第二个选项,它是
by
还是
with
?我在
gremlin>org.janusgraph.graphdb.tinkerpop.io.graphson.JanusGraphSONModuleV2d0.getInstance()=>org.janusgraph.graphdb.tinkerpop.io.graphson这两个方面都遇到了问题。JanusGraphSONModuleV2d0@4f947862gremlin>sg.io('/tmp/sample2.json')。with(io.registry,org.janusgraph.graphdb.tinkerpop.io.graphson.JanusGraphSONModuleV2d0.getInstance()).write().iterate()ClassNotFoundException JanusGraphSONModuleV2d0
,因此控制台可以找到
JanusGraphSONModuleV2d0
,但在我将其作为IO函数的一部分发送时无法找到。您的初始图形是JanusGraph,因此TinkerGraph包含顶点/边等图形元素的JanusGraph标识符。因此,您需要告诉GraphSON如何处理这些问题。我已经更新了我的答案-我把第二个代码示例搞砸了
sg.io('/tmp/sample.json').
     with(IO.registry, JanusGraphIoRegistry.getInstance()).
   write().iterate()