将批量json数据导入neo4j

时间:2017-04-13 06:28:59

标签: neo4j cypher

我正在尝试加载大小约为700k的json文件。但是它向我展示了空间错误的堆内存。

我的查询如下:

WITH "file:///Users//arundhathi.d//Documents//Neo4j//default.graphdb//import//tjson.json" as url  
call apoc.load.json(url) yield value as article return article

就像在csv中一样,我尝试将USING PERIODIC COMMIT 1000与json一起使用。但我不允许使用加载json。

如何加载批量json数据?。

2 个答案:

答案 0 :(得分:0)

apoc.load.json现在支持json-path作为第二个参数。

要从文件中的数组中获取前1000个JSON对象,请尝试以下操作:

WITH "file:///path_to_file.json" as url  
CALL apoc.load.json(url, '[0:1000]') YIELD value AS article
RETURN article;

[0:1000]语法指定一系列数组索引,第二个数字是独占的(因此,在此示例中,范围中的最后一个索引是999)。

上述内容至少应该适用于neo4j 3.1.3(带有apoc release 3.1.3.6)。另请注意,neo4j的桌面版本(通过Windows和OSX安装程序安装)有一个new requirement,关于在何处放置apoc等插件以导入本地文件。

答案 1 :(得分:0)

您还可以使用jq(超快速json转换器)将JSON转换为CSV文件。 https://stedolan.github.io/jq/tutorial/

根据以下推荐的方法:https://neo4j.com/blog/bulk-data-import-neo4j-3-0/

如果文件很多,请编写一个python程序或类似的程序来遍历整个文件的调用长度:

os.system("cat file{}.json | jq '. [.entity1, .entity2, .entity3] | @csv' >> concatenatedCSV.csv".format(num))

或在Go中:

exec.Command("cat file"+num+".json | jq '. [.entity1, .entity2, .entity3] | @csv' >> concatenatedCSV.csv")

我最近针对大约700GB的JSON文件执行了此操作。要以正确的格式获取csv文件需要花费一些时间,但是如果您按照jq上的教程进行操作,则将学习如何做。此外,请检查标题的位置以及此处不需要的标题:https://neo4j.com/docs/operations-manual/current/tools/import/

将其全部转换大约需要一天的时间,但是考虑到使用apoc的交易开销,并且一旦文件为格式,便可以随时重新导入,从长远来看,这是值得的。