在 python 中使用 pickle 从 Neo4j 转储图表
Dump a Graph from Neo4j with pickle in python
我在 Neo4j 中有一个相当大的图,需要用它做一些计算。这就是我需要在 HPC 集群上执行此操作的原因。到目前为止,一切都很好。但是我的程序多次访问 neo4j 图,这是我在集群上做不到的。这就是为什么我想用 pickle.dump() 转储图形对象的原因。不幸的是我得到一个错误:
File "...myFile.py", line 9, in
pickle.dump(Graph("bolt:///localhost:7474/", auth=("neo4j", "0000")), f)
AttributeError: Can't pickle local object 'ConnectionPool.connect..'
我的(简化)代码:
import pickle
from py2neo import Graph
graph2 = Graph("bolt:///localhost:7474/", auth=("neo4j", "0000"))
with open('graph.pkl', 'wb') as f:
pickle.dump(Graph("bolt:///localhost:7474/", auth=("neo4j", "0000")), f)
with open('graph.pkl', 'rb') as f:
graph = pickle.load(f)
print("Hello")
有人能告诉我,为什么会出现这个错误(以及如何消除它)?非常感谢您。
我猜你会收到这个错误,因为你不仅要转储节点和关系,还要转储图的整个实例 class,包括函数等
我不清楚转储将如何帮助您实现目标。
这个答案看起来很有希望:
这个想法是从您的 Neo4j 数据库创建一个 Python iGraph。
然后可以将其腌制等
你需要做的是实现__getstate__
和__setstate__
。有关示例,请参见 here。我认为您必须扩展 Graph
才能实现这些方法。
我在 Neo4j 中有一个相当大的图,需要用它做一些计算。这就是我需要在 HPC 集群上执行此操作的原因。到目前为止,一切都很好。但是我的程序多次访问 neo4j 图,这是我在集群上做不到的。这就是为什么我想用 pickle.dump() 转储图形对象的原因。不幸的是我得到一个错误:
File "...myFile.py", line 9, in pickle.dump(Graph("bolt:///localhost:7474/", auth=("neo4j", "0000")), f) AttributeError: Can't pickle local object 'ConnectionPool.connect..'
我的(简化)代码:
import pickle
from py2neo import Graph
graph2 = Graph("bolt:///localhost:7474/", auth=("neo4j", "0000"))
with open('graph.pkl', 'wb') as f:
pickle.dump(Graph("bolt:///localhost:7474/", auth=("neo4j", "0000")), f)
with open('graph.pkl', 'rb') as f:
graph = pickle.load(f)
print("Hello")
有人能告诉我,为什么会出现这个错误(以及如何消除它)?非常感谢您。
我猜你会收到这个错误,因为你不仅要转储节点和关系,还要转储图的整个实例 class,包括函数等
我不清楚转储将如何帮助您实现目标。
这个答案看起来很有希望:
这个想法是从您的 Neo4j 数据库创建一个 Python iGraph。
然后可以将其腌制等
你需要做的是实现__getstate__
和__setstate__
。有关示例,请参见 here。我认为您必须扩展 Graph
才能实现这些方法。