3

我正在尝试使用 JanusGraph 在 Gremlin shell 中将子图输出为 GraphSON。

TinkerPop 文档供参考: http ://tinkerpop.apache.org/docs/current/reference/#graphson-reader-writer

但是,当我编写完整的图表时,它可以正常工作,但是,当我想编写使用这些命令查询过的子图表时:

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

我使用相同的写入命令:

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

我收到此错误:

(是 java.lang.IllegalStateException)(通过引用链:org.janusgraph.graphdb.relations.RelationIdentifier["inVertexId"])

环顾四周,我发现另一个线程说我需要导入一个包才能正确执行此操作(对于 TitanGraph,但我认为它也适用于 JanusGraph):Import package in gremlin

但是,每当我尝试导入时:

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

我收到此错误:

无效的导入定义:'com.thinkaurelius.titan.graphdb.tinkerpop.io.graphson.TitanGraphSONModule';原因:启动失败:script1494618250861805544050.groovy:1:无法解析类 com.thinkaurelius.titan.graphdb.tinkerpop.io.graphson.TitanGraphSONModule @ 第 1 行,第 1 列。导入 com.thinkaurelius.titan.graphdb.tinkerpop.io。 graphson.TitanGraphSON模块 ^

1 个错误

如何使用 JanusGraph 在 Gremlin shell 中将子图输出为 GraphSON?

4

2 回答 2

6

当您使用该subgraph()步骤时,结果是 a TinkerGraph,但是它的顶点和边 ID 是从JanusGraph实例中继承的。特别是,边缘 ID 的类型RelationIdentifier需要 JanusGraph 的自定义序列化JanusGraphSONModule程序才能干净地导出。

这是一个示例,基于Titan之前的示例,您可以在 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')
于 2017-05-16T04:06:40.617 回答
1

您可能只需要导入相当于 Titan 模块的 JanusGraph 模块,它应该是:org.janusgraph.graphdb.tinkerpop.io.graphson.JanusGraphSONModule

因此,此导入应该有效:

gremlin>  import org.janusgraph.graphdb.tinkerpop.io.graphson.JanusGraphSONModule
于 2017-05-15T07:19:57.683 回答