【问题标题】:Importing data into Neo4J from CSV将数据从 CSV 导入 Neo4J
【发布时间】:2017-01-31 19:32:21
【问题描述】:

我正在尝试将包含节点 (+200000) 和它们之间的边的 CSV 导入 Neo4J。

1) 出于某种我找不到的原因,当文件大小超过 5000 行(左右)时,根本不会创建关系。

USING PERIODIC COMMIT 100
LOAD CSV WITH HEADERS FROM "file:///export_conceptos_50000.txt" AS csvLine
FIELDTERMINATOR '\t'
MERGE (c:Concepto {nom: csvLine.concepto1_sin, cat: csvLine.c1cat})
MERGE (d:Concepto {nom: csvLine.concepto2_sin, cat: csvLine.c2cat})
FOREACH(ignoreMe IN CASE WHEN csvLine.relacion='Is_a' THEN [1] ELSE [] END |     MERGE (c)-[:Is_a]->(d) )
FOREACH(ignoreMe IN CASE WHEN csvLine.relacion='Finding_site' THEN [1] ELSE [] END |     MERGE (c)-[:Finding_site]->(d) )

所以 this 是原始问题:没有创建边。

2) 作为替代方案,我尝试将文件拆分为较小的文件,然后通过 neo4j-shell(Neo4J Linux shell 实用程序)导入。

这是命令行:

./neo4j-shell -file /usr/share/neo4j/scripts/query.cypher -path /usr/share/neo4j/neo4j-community-3.1.1/data/databases/graph.db

这是输出:

ERROR (-v for expanded information):
        Error starting org.neo4j.kernel.impl.factory.GraphDatabaseFacadeFactory, /usr/share/neo4j/neo4j-community-3.1.1/data/databases/graph.db

我猜这是因为已经有一个 Neo4J 引擎在运行。

那么,我应该如何在命令行中指定目标数据库呢?

谢谢!

【问题讨论】:

    标签: neo4j


    【解决方案1】:
    1. 您可能希望执行多遍,否则您可能会遇到急切加载 CSV 数据的问题

    2. 也许你的条件句有问题,如果你还是做多遍,你也可以把它们改成一个简单的 WHERE

    像这样:

    USING PERIODIC COMMIT 100000
    LOAD CSV WITH HEADERS FROM "file:///export_conceptos_50000.txt" AS csvLine
    FIELDTERMINATOR '\t'
    MERGE (c:Concepto {nom: csvLine.concepto1_sin, cat: csvLine.c1cat});
    
    USING PERIODIC COMMIT 100000
    LOAD CSV WITH HEADERS FROM "file:///export_conceptos_50000.txt" AS csvLine
    FIELDTERMINATOR '\t'
    MERGE (d:Concepto {nom: csvLine.concepto2_sin, cat: csvLine.c2cat});
    
    USING PERIODIC COMMIT 10000
    LOAD CSV WITH HEADERS FROM "file:///export_conceptos_50000.txt" AS csvLine
    FIELDTERMINATOR '\t'
    WITH csvLine WHERE csvLine.relacion='Is_a'
    MATCH (c:Concepto {nom: csvLine.concepto1_sin, cat: csvLine.c1cat})
    MATCH (d:Concepto {nom: csvLine.concepto2_sin, cat: csvLine.c2cat})
    MERGE (c)-[:Is_a]->(d);
    
    
    USING PERIODIC COMMIT 10000
    LOAD CSV WITH HEADERS FROM "file:///export_conceptos_50000.txt" AS csvLine
    FIELDTERMINATOR '\t'
    WITH csvLine WHERE csvLine.relacion='Finding_site'
    MATCH (c:Concepto {nom: csvLine.concepto1_sin, cat: csvLine.c1cat})
    MATCH (d:Concepto {nom: csvLine.concepto2_sin, cat: csvLine.c2cat})
    MERGE (c)-[:Finding_site]->(d);
    

    【讨论】:

    • 谢谢迈克尔。我拿了你的小费,它已经运行了一段时间。让我们看看!
    猜你喜欢
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    相关资源
    最近更新 更多