【问题标题】:Importing 64k tupples into neo4j将 64k 元组导入 neo4j
【发布时间】:2015-02-07 13:07:14
【问题描述】:

我正在尝试将大约 64000 行导入到 neo4j 图中。在导入期间,我将一些属性转换为关系,因为这些属性也被其他字段用于合并。

这是我的密码查询:

USING PERIODIC COMMIT 150
LOAD CSV WITH HEADERS FROM "http://example.com/some.csv" as csvline
MERGE (gem:Gemeente     { name: csvline.GEMEENTE})
MERGE (cbs:CBS          { name: csvline.CBSCODE})
CREATE (obj:Object      { id: toInt(csvline.NUMMER), 
                          prop2: toInt(csvline.PROP2)
                         })
CREATE (obj)-[:IN_GEMEENTE]->(gem) 
CREATE (obj)-[:CBS_CODE]->(cbs)

当我手动将 csv 文件截断为 10 行时;这个密码运行完美。我得到了一个带有适当关系的漂亮图表。

但是为我的 csv 文件中的每一行运行 Cypher 脚本,服务器只会因错误/警告而停止。

7474 的仪表板中,我只是得到一个简单的错误,没有任何信息。在 neo4j shell 中出现以下错误:

Error occurred in server thread; nested exception is:
    java.lang.OutOfMemoryError: Java heap space

看来我的内存不足了。所以我试图减少提交数;但这没有任何效果。
当然,我在 :Gemeente(naam):CBS(naam) 上都有索引

解决方案可能是将文件拆分为“负担得起的”块;但这当然是很多工作:) 而不是真正的解决方案。

我该如何解决这个问题?

【问题讨论】:

  • 您是否调整了数据库的内存设置?您应该尝试增加资源,而不是减少提交大小。
  • 不,我没有调整设置。应该调整哪些设置?我只绑定了 1GB 的 RAM....
  • 您是否为 :Gemeente(name) 和 :CBS(name) 创建了索引/约束?
  • 你能分享你的输入文件进行测试吗?或者至少是前几行?
  • 这是一个翻译错字:数据集是荷兰语,但我将其翻译成英文,但我忘记更新帖子中的文本。在 neo4j 中,正确的标签和属性有一个索引。

标签: csv neo4j


【解决方案1】:

您可能遇到了“急切”的问题。这些帖子中对此进行了讨论:

http://jexp.de/blog/2014/10/load-cvs-with-success/

http://www.markhneedham.com/blog/2014/10/23/neo4j-cypher-avoiding-the-eager/

这样可能会更好:

USING PERIODIC COMMIT 150
LOAD CSV WITH HEADERS FROM "http://example.com/some.csv" as csvline
MERGE (gem:Gemeente     { name: csvline.GEMEENTE});

USING PERIODIC COMMIT 150
LOAD CSV WITH HEADERS FROM "http://example.com/some.csv" as csvline
MERGE (cbs:CBS          { name: csvline.CBSCODE});

USING PERIODIC COMMIT 150
LOAD CSV WITH HEADERS FROM "http://example.com/some.csv" as csvline
CREATE (obj:Object      { id: toInt(csvline.NUMMER), 
                      prop2: toInt(csvline.PROP2)
                     })
MATCH
  (gem:Gemeente     { name: csvline.GEMEENTE}),
  (cbs:CBS          { name: csvline.CBSCODE})
CREATE (obj)-[:IN_GEMEENTE]->(gem) 
CREATE (obj)-[:CBS_CODE]->(cbs)

不过,您可能不需要像那样拆分它。此外,由于您至少需要加载 csv 文件两次,因此您可能希望将其保存在本地并从磁盘运行 CSV 导入。语法是LOAD CSV WITH HEADERS FROM "file:///path/to/file" as csvline(我第一次尝试时很难找到示例。Itsfile://` 后跟路径。我的示例是 unix 路径,但也可以后跟windows 路径,我相信)

【讨论】:

  • 当使用三个密码语句中的最后一个时,服务器刚刚停止。在第一次创建Object 并在第二次创建关系时将其分解,它起作用了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多