我正在尝试通过Py2Neo批量导入数百万个节点。
我不知道哪种更快的BatchWrite
或cipher.Transaction
,但是后者似乎是最好的选择,因为我需要分割批次。
但是,当我尝试执行一个简单的事务时,收到一个奇怪的错误。
python代码:
session = cypher.Session("http://127.0.0.1:7474/db/data/") #error also w/o /db/data/
def init():
tx = session.create_transaction()
for ngram, one_grams in data.items():
tx.append("CREATE "+str(n)+":WORD {'word': "+ngram+", 'rank': "+str(ngram_rank)+", 'prob': "+str(ngram_prob)+", 'gram': '0gram'}")
tx.execute() # line 69 in the error below
错误:
Traceback (most recent call last):
File "Ngram_neo4j.py", line 176, in <module>
init(rNgram_file="dataset_id.json")
File "Ngram_neo4j.py", line 43, in init
data = probability_items(data)
File "Ngram_neo4j.py", line 69, in probability_items
tx.execute()
File "D:\datasets\GOOGLE~1\virtenv\lib\site-packages\py2neo\cypher.py", line 224, in execute
return self._post(self._execute or self._begin)
File "D:\datasets\GOOGLE~1\virtenv\lib\site-packages\py2neo\cypher.py", line 209, in _post
raise TransactionError(error["code"], error["status"], error["message"])
KeyError: 'status'
我试图捕获异常:
except cypher.TransactionError as e:
print("--------------------------------------------------------------------------------------------")
print(e.status)
print(e.message)
但是永远不会被召唤。 (也许是我的错误?)
使用graph_db.create({“ node:” node})进行常规插入可以正常工作,但速度非常慢(2.5M节点为36小时)
请注意,数据集由一系列JSON文件组成,每个文件的结构深度为5级。
我想批处理最后两个级别(每批大约100至20.000个节点)
-编辑-
我正在使用Py2Neo 1.6.1,Neo4j 2.0.0。当前在Windows 7上(以及在OSX Mav。,CentOS 6上)
最佳答案
您看到的问题是由于Neo4j服务器报告Cypher事务错误的方式发生了最后的更改。 Py2neo 1.6是针对M05 / M06构建的,当RC1 / GA中的一些功能发生变化时,Py2neo在一些地方损坏了。
Py2neo 1.6.2(https://github.com/nigelsmall/py2neo/issues/224)的此问题已修复,但我尚不知道何时才能获得完成并发布此版本的机会。
关于python - py2neo密码交易失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21009439/