Deb*_*har 3 python gremlin tinkerpop gremlin-server janusgraph
我开始玩gremlin-python包装器来与我的gremlin服务器进行交互.
我做了以下步骤:
./bin/gremlin.sh
Run Code Online (Sandbox Code Playgroud)
一旦Gremlin控制台打开,我使用以下命令加载配置:
graph = JanusGraphFactory.open('conf/gremlin-server/janusgraph-cassandra-es.properties')
g = graph.traversal()
saturn = g.V().has('name', 'saturn')
Run Code Online (Sandbox Code Playgroud)
gremlin shell中的上面一组代码工作得很好,我可以看到列出的脊椎,但是当我尝试在python中做同样的事情时,我得到一个空图.以下是我的python代码:
graph = Graph()
g = graph.traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin','g'))
print(g)
Run Code Online (Sandbox Code Playgroud)
它返回: graphtraversalsource [graph [empty]]
为什么我得到空图?据我所知,它无法连接到相同的Graph源.有什么我想念的吗?
请注意:
JanusGraphFactory.open('conf/gremlin-server/janusgraph-cassandra-es.properties')
Run Code Online (Sandbox Code Playgroud)
提供的配置文件名是用于启动gremlin服务器的文件名.
任何帮助都非常感谢.
谢谢
Jas*_*rad 12
你看到graph [empty]的原因是因为这是Python图形对象的实际字符串表示 - 请参阅此处的代码.图形实际上可能包含数据,因此如果它像graph [remote]或graph []那样会更好.我已经开辟了一个问题来解决这个问题.
开箱即用,JanusGraph未配置Python.您可以在Apache TinkerPop文档中找到有关如何执行此操作的文档.首先安装gremlin-python.假设您正在使用使用TinkerPop 3.2.3的JanusGraph 0.1.1,这是命令:
bin/gremlin-server.sh -i org.apache.tinkerpop gremlin-python 3.2.3
Run Code Online (Sandbox Code Playgroud)
接下来修改conf/gremlin-server/gremlin-server.yaml添加gremlin-python脚本引擎:
scriptEngines: {
gremlin-groovy: {
imports: [java.lang.Math],
staticImports: [java.lang.Math.PI],
scripts: [scripts/empty-sample.groovy]},
gremlin-jython: {},
gremlin-python: {}
}
Run Code Online (Sandbox Code Playgroud)
要使用Gremlin Python,您需要浏览Gremlin Server,因此启动JanusGraph 预打包发行版:
bin/janusgraph.sh start
Run Code Online (Sandbox Code Playgroud)
从Gremlin控制台:
gremlin> graph = JanusGraphFactory.open('conf/janusgraph-cassandra-es.properties')
==>standardjanusgraph[cassandrathrift:[127.0.0.1]]
gremlin> GraphOfTheGodsFactory.load(graph)
==>null
gremlin> g = graph.traversal()
==>graphtraversalsource[standardjanusgraph[cassandrathrift:[127.0.0.1]], standard]
gremlin> g.V().count()
14:51:58 WARN org.janusgraph.graphdb.transaction.StandardJanusGraphTx - Query requires iterating over all vertices [()]. For better performance, use indexes
==>12
Run Code Online (Sandbox Code Playgroud)
安装Gremlin-Python驱动程序,再次匹配TinkerPop版本:
pip install gremlinpython==3.2.3
Run Code Online (Sandbox Code Playgroud)
从Python 3 shell:
>>> from gremlin_python import statics
>>> from gremlin_python.structure.graph import Graph
>>> from gremlin_python.process.graph_traversal import __
>>> from gremlin_python.process.strategies import *
>>> from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
>>> graph = Graph()
>>> g = graph.traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin','g'))
>>> print(graph)
graph[empty]
>>> print(g)
graphtraversalsource[graph[empty]]
>>> g.V().count().next()
12
>>> g.addV('god').property('name', 'mars').property('age', 3500).next()
v[4280]
>>> g.V().count().next()
13
Run Code Online (Sandbox Code Playgroud)
请记住,当您在Python shell中工作时,图形遍历不会自动迭代,因此您需要确保使用iterate()或next()或迭代遍历遍历toList().
Gremlin 控制台中的本地“g”是图形的嵌入式实例。因此它“包含”一些东西并且不是空的。对于 Python 中的“g”,它是“空”,因为它本身没有顶点/边 - 顶点/边位于它反映的 Gremlin 服务器上的远程图中。我假设如果你在 python 中执行 a 操作,g.V().count()你会得到与在 java 中执行相同操作时相同的顶点计数。如果没有,那么还有一些其他问题,但不要期望“远程”图实例显示任何类型的顶点/边(除非有一天 gremlin-python 被编写为具有自己的 Python 原生的 Gremlin 虚拟机附加到它的图形数据库 - 在这种情况下,“g”将被嵌入,因此拥有顶点/边,并且可能不再打印为“空”)。
| 归档时间: |
|
| 查看次数: |
2388 次 |
| 最近记录: |