【问题标题】:how to iterate through a csv file in neo4j如何在neo4j中遍历一个csv文件
【发布时间】:2018-01-31 05:02:57
【问题描述】:

https://raw.githubusercontent.com/saurabhkumar1903/neo4j/master/alterFile/sampletestoutput1.csv

这是显示我预期输出的图像的链接:[https://i.imgur.com/x6CYdfU.jpg]我在纸上绘制它只是为了显示预期输出。

[我有一个包含节点列表的 csv 文件,其中每一行表示第 [0] 行的节点与其他所有节点列表的关系 line2,line2,line[3]... ..line[4500] 在那一行]

例如。 1,3,4,5,7,8

2,4,5,11

4,10,11,15

这里的节点在 line[0] i.e. "1" has a directed relationship with nodes at line[2] i.e "3" as a friend, nodes at line[4], i,e."4" as a friend, nodes at line[6], i,e."5" as a friend,

我想要做的是我想在 neo4j 中显示一个图表,描述每个节点之间建议的朋友关系。

我想不通的是如何迭代整个 csv 文件以及捕获 csv 文件每一行上每个节点之间的关系。

【问题讨论】:

  • 我不明白你想做什么你能举一个更明确的例子来说明你在 CSV(摘录)中的内容以及你想要实现的目标吗?
  • 首先,在 Neo4j 中的 line[0] 表示当前读取的 CSV live 的第 0 列(前提是您在指令中写了“AS line”)这个 CYpher 是否可以解决您的问题 MATCH(p0:Person {id:line[0]}),(p1:Person{id:line[0]}) CREATE (p0)-[:FRIEND_OF]->(p1) 不过,我同意@logisima,你应该更明确

标签: csv neo4j graph-databases


【解决方案1】:

如果您想确保id 位于首位的人(在line 中)和 ID 位于其后的人(在同一个line 中)之间存在HAS_FRIEND 关系,应该这样工作:

LOAD CSV FROM 'file:///friends.csv' AS line
MERGE (p:Person {id: TOINT(line[0])})
FOREACH(id IN line[1..] |
  MERGE(f:Person {id: TOINT(id)})
  MERGE (p)-[:HAS_FRIEND]-(f))

此查询假定您只需要任意 2 个节点之间的单个 HAS_FRIEND 关系。因此,关系的MERGE 没有指定方向。这样,如果在任何一个方向上已经存在这样的关系,则不会创建新的关系。

另外,TOINT 函数用于将 id 值转换为整数(因为LOAD CSV 自动将所有值视为字符串)。如果您不需要该转换,则可以删除函数调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 2012-10-19
    相关资源
    最近更新 更多