泰坦 - > Neo4j Gremlin子图

时间:2015-10-31 16:14:45

标签: titan gremlin tinkerpop3

我希望提取附加到特定列表的所有边和顶点以及它们跟随的人,并将它们直接复制到neo4j,或者通过创建数据的graphson或kryo文件。

类似的东西:

g.V().has("sublist_id", 14).in('ON').out('FOLLOWS')

我基本上希望单独的数据库或文件中的每个顶点和边缘都能单独查询。

我最好的方法是什么?

我做了以下操作,但似乎无法导出为json或kryo只有graphml。

gremlin> subGraph = g.V().has('sublist_id', 14).in('ON').outE('FOLLOWS').subgraph('subGraph').cap('subGraph').next()
==>tinkergraph[vertices:3438716 edges:14090945]


gremlin> subGraph.io(IoCore.gryo()).writeGraph("/data/test.kryo")
Class is not registered: com.thinkaurelius.titan.graphdb.relations.RelationIdentifier
Note: To register this class use: kryo.register(com.thinkaurelius.titan.graphdb.relations.RelationIdentifier.class);
Display stack trace?


gremlin> subGraph.io(IoCore.graphson()).writeGraph("/data/test.json");
(was java.lang.IllegalStateException) (through reference chain: com.thinkaurelius.titan.graphdb.relations.RelationIdentifier["inVertexId"])
Display stack trace? [yN]

1 个答案:

答案 0 :(得分:1)

当您从一个图形生成子图并尝试推送到另一个图形时,您可能会遇到序列化问题,因为新图形可能不知道如何处理第一个图形中的数据。这就是你在这里的情况,特别是RelationIdentifier这是泰坦的唯一身份。

所以要说明在你的工作环境中,你有一个TinkerGraph里面有Titan RelationIdentifier,当你去写gryo时,序列化过程失败了,因为TinkerGraph不知道泰坦序列号。

你可以通过给gryo Titan序列化器来解决这个问题。做类似的事情:

gryo = GryoIo.build().registry(TitanIoRegistry.INSTANCE).graph(subGraph).create()
gryo.writeGraph("/data/test.kryo")

这是一种方法。您还可以从头开始构建GryoWriter,以便更好地控制不同的选项和设置。