【问题标题】:py2neo Cypher transactions failingpy2neo Cypher 交易失败
【发布时间】:2014-01-09 00:25:09
【问题描述】:

我正在尝试通过 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}) 的常规插入确实有效,但速度非常慢(250 万个节点需要 36 小时) 请注意,数据集由一系列 JSON 文件组成,每个文件都有 5 层深的结构。 我想批处理最后 2 个级别(每批大约 100 到 20.000 个节点)

--- 编辑 ---

我正在使用 Py2Neo 1.6.1、Neo4j 2.0.0。目前在 Windows 7(还有 OSX Mav.、CentOS 6)上

【问题讨论】:

    标签: python neo4j cypher py2neo


    【解决方案1】:

    您看到的问题是由于在最后一刻更改了 Neo4j 服务器报告 Cypher 事务错误的方式。 Py2neo 1.6 是针对 M05/M06 构建的,当 RC1/GA 中的一些功能发生变化时,Py2neo 在一些地方出现问题。

    Py2neo 1.6.2 (https://github.com/nigelsmall/py2neo/issues/224) 已修复此问题,但我尚不知道何时有机会完成并发布此版本。

    【讨论】:

    • 我手动修补了它,现在我看到了正确的错误消息!
    【解决方案2】:

    您使用的是什么 neo4j 和 py2neo 版本?

    您应该为您的创建语句使用参数。

    您能否检查data/logs 和data/graph.db/messages.log 中的服务器日志是否有错误?

    如果您要插入这么多数据,那么直接批量插入可能更有意义?

    见:http://neo4j.org/develop/import

    为此我写了两个工具:

    【讨论】:

    • default_graph.db/messages.log 没有任何内容。我在哪里可以找到 Windows 上的数据/日志?我宁愿不将所有 python 文件重写为 GEOFF/GraphML,这是 8.5Gb 的数据......但如果它真的更快,我会试一试
    • 您可以只吐出 CSV 甚至只是 cypher 语句和参数的 csv。
    • 原始 csv-batch-importer 最多可以处理 1M 个节点/秒。
    • 如何在 CSV 中建立关系?我应该为此使用 GEOFF 吗?
    • 作为一个pythonista你也可以看看这个:blog.neo4j.org/2013/11/musicbrainz-in-neo4j-part-1.html
    猜你喜欢
    • 2021-05-11
    • 2014-04-09
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多