[英]py2neo Cypher transactions failing
我正在嘗試通過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級。 我想批量最后2個級別(每批大約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 )已修復此問題,但我還不知道何時有機會完成並發布此版本。
您使用的是neo4j和py2neo版本?
您應該為create語句使用參數。
你能檢查data/logs
和data/graph.db/messages.log
的服務器日志是否有錯誤?
如果要插入如此多的數據,那么直接批量插入可能更有意義嗎?
見: http : //neo4j.org/develop/import
我為此寫的兩個工具:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.