我试图将大约64,000行导入到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)
解决方案可能是将文件拆分为“价格实惠”。块;但那当然要做很多工作:)而不是一个真正的解决方案。
如何解决此问题?
答案 0 :(得分:3)
你可能正在遇到“急切”的问题。这些帖子对此进行了讨论:
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
(当我第一次尝试它时,我很难找到一个例子。它s
file://`后跟路径。我的例子是一个unix路径,但也可以接下来是一条Windows路径,我相信)