将64k tupples导入neo4j

时间:2014-12-09 15:15:15

标签: csv neo4j

我试图将大约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)

的索引

解决方案可能是将文件拆分为“价格实惠”。块;但那当然要做很多工作:)而不是一个真正的解决方案。

如何解决此问题?

1 个答案:

答案 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路径,我相信)