【问题标题】:Neo4j/Cypher Import a CSV fileNeo4j/Cypher 导入 CSV 文件
【发布时间】:2021-04-01 09:42:12
【问题描述】:

我有一个 CSV 文件,它有 11 列:Rank、Year、Name... 它包含最好的视频游戏销售。我是 neo4j 和 cypher 的新手。

我正在尝试使用以下密码查询将其导入 neo4j: LOAD CSV WITH HEADERS FROM 'file:///vgsales.csv' AS line CREATE (:Vgsales {rank: toInteger(line.Rank), name: line.Name, platform: line.Platform, year: toInteger(line.Year), genre: line.Genre, publisher: line.Publisher, NA_sales: toInteger(line.NA_Sales), EU_sales: toInteger(line.EU_Sales)], JP_sales: toInteger(line.JP_Sales), Other_sales: toInteger(line.Other_Sales), Global_sales: toInteger(line.Global_Sales)})

当我这样做时,我有节点,但它们之间没有关系,我需要用这个查询给图形模型:调用 db.schema.visualization 但是当我这样做时只有一个空节点.

我不明白为什么没有任何关系。

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    您的脚本存在语法错误。您可以在下面删除此行:

    WITH v 
    

    我在我的 neo4j 浏览器上试了一下,效果很好:

    LOAD CSV WITH HEADERS FROM 'file:///vgsales.csv' AS line 
    CREATE(v:Vgsales {rank: toInteger(line.Rank), name: line.Name, platform: line.Platform, year:toInteger(line.Year)}) 
    //WITH v  <- remove this!
    MERGE (g:GENRE {genre: line.Genre}) 
    MERGE (p:PUBLISHER {publisher: line.Publisher, NA_sales: toInteger(line.NA_Sales), 
    EU_sales: toInteger(line.EU_Sales), JP_sales: toInteger(line.JP_Sales), Other_sales: toInteger(line.Other_Sales), Global_sales: toInteger(line.Global_Sales)}) 
    MERGE (v)-[:IN_GENRE]->(g) 
    MERGE (p)-[:PUBLISHED]->(v) 
    
    Result: Added 3 labels, created 3 nodes, set 11 properties, created 2 relationships, completed after 235 ms.
    

    【讨论】:

    • 谢谢,它成功了。你知道我如何确定图的每个节点的入度和出度以及总度数。此外,图的最长路径是图的直径和图的密度。最后两个问题是每种类型的关系数,以及每个标签的节点数。
    • 如果您对答案满意,请采纳并点赞。谢谢。然后为获得学位创建另一个问题。顺便说一句,这是学校作业吗?
    • 这是我第一次使用堆栈溢出,我现在接受了你的回答,是的,这是一个学校作业。
    【解决方案2】:

    感谢您的回答。 我发回查询是因为有一个我忘记删除的“]”:

    LOAD CSV WITH HEADERS FROM 'file:///vgsales.csv' AS line CREATE(v:Vgsales {rank: toInteger(line.Rank), name: line.Name, platform: line.Platform, year:toInteger(line.Year)}) WITH v MERGE (g:GENRE {genre: line.Genre}) MERGE (p:PUBLISHER {publisher: line.Publisher, NA_sales: toInteger(line.NA_Sales), EU_sales: toInteger(line.EU_Sales), JP_sales: toInteger(line.JP_Sales), Other_sales: toInteger(line.Other_Sales), Global_sales: toInteger(line.Global_Sales)}) MERGE (v)-[:IN_GENRE]->(g) MERGE (p)-[:PUBLISHED]->(v) 
    

    但是查询仍然不起作用。我有这个错误:enter image description here

    这就是我的数据集的样子:enter image description here

    我明天必须做的练习是找到一个数据集,找到一个有问题的并用插件算法回答它,然后获取图形模型并在 neo4j 中加载 csv 文件,但我不知道应该怎么做添加节点之间的关系。

    【讨论】:

      【解决方案3】:

      从您的代码看来,您似乎没有为 csv 中的每一行创建任何关系,只是一个节点。 我的建议是先尝试创建模型。您可以使用 arrows.app 来尝试描述您的模型。

      可以说,通过连接两个节点来创建关系

      CREATE (:PERSON {name:"CHARLIE")-[:FOLLOWS]->(:PERSON {name:"JOHN"})
      

      从你的代码 id 可能尝试类似

      LOAD CSV WITH HEADERS FROM 'file:///vgsales.csv' AS line CREATE(v:Vgsales {rank: toInteger(line.Rank), name: line.Name, platform: line.Platform, year: toInteger(line.Year)}) WITH v MERGE (g:GENRE {genre: line.Genre}) MERGE (p:PUBLISHER {publisher: line.Publisher, NA_sales: toInteger(line.NA_Sales), EU_sales: toInteger(line.EU_Sales)], JP_sales: toInteger(line.JP_Sales), Other_sales: toInteger(line.Other_Sales), Global_sales: toInteger(line.Global_Sales)}) MERGE (v)-[:IN_GENRE]->(g) MERGE (p)-[:PUBLISHED]->(v)
      

      我不确定它是否适合你的模型,尽管你可以尝试绘制你的模型,也许我会写出更好的代码。


      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-02
        • 2017-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多