【问题标题】:How to store a list of numbers in CSV file as integers in Neo4j如何将 CSV 文件中的数字列表存储为 Neo4j 中的整数
【发布时间】:2018-04-13 03:32:18
【问题描述】:

例如,我有一个包含以下数字的 CSV 文件,

example.csv contains(Field A1):

1, 2, 4, 5, 6, 7, 10

我尝试使用以下 Neo4j 代码

LOAD CSV FROM "file:///example.csv" AS line
CREATE (d:Data) SET d.date= timestamp()
SET d.data = line WITH d
MATCH (t:Timestamp {name: "Digital"})
CREATE (d)<-[:HAS]-(t)

所以在 d.data 中,存储了一个字符串列表,但我想要一个整数列表。我尝试使用下面的代码,但它给出了错误。

SET d.data = toInt(line)

是否可以将上述 CSV 数据作为整数列表存储在 d.data 中?提前致谢。

【问题讨论】:

  • 您的 CSV 文件中有多少行?是不是只有一行?
  • 是的,它是包含 250 个值的单行。如果没有 toInt(line),当我看到 json 表单“data”:[“1”,“2”...] 时,我会得到一个字符串列表,但我想要一个整数列表“data”:[1,2. ...]

标签: csv import neo4j


【解决方案1】:

line 是一个值列表,因此您可以使用list comprehension 将其每个元素转换为整数。如果字符串中有空格,请使用trim 将其删除(ltrim 也可能有效,但性能提升很小)。

LOAD CSV FROM "file:///example.csv" AS line
CREATE (d:Data) SET d.date = timestamp()
SET d.data = [value IN line | toInteger(trim(value))]
WITH d
MATCH (t:Timestamp {name: "Digital"})
CREATE (d)<-[:HAS]-(t)

(请注意,如果您不使用WITH HEADERS 选项,line 变量只是一个列表。)

【讨论】:

  • 我相信这会在 CSV 文件中的每个数字上创建一个节点,而不是 d.data 中的整数列表
  • 我收到此错误 Neo.ClientError.Statement.TypeError: 包含空值的集合不能存储在属性中。 :(
  • 尝试先列出结果,即RETURN [value IN line | toInteger(value)],然后看看它显示了什么。
  • 好的,它仅在 CSV 文件在逗号后没有空格时才有效,即。 1, 2, 3 而不是 csv 必须像 1,2,3 一样保存。可以用空格做吗?
  • 当然,只是trim 的值。我更新了答案。
【解决方案2】:

您可以像这样将函数映射到字符串列表,

LOAD CSV FROM "file:///example.csv" AS line
CREATE (d:Data) SET d.date= timestamp()
SET d.data = extract(i in line | toInt(i)) WITH d
MATCH (t:Timestamp {name: "Digital"})
CREATE (d)<-[:HAS]-(t)

我不确定 cypher 是否会自动将 line 转换为列表,但如果不是,您也可以尝试,

LOAD CSV FROM "file:///example.csv" AS line
CREATE (d:Data) SET d.date= timestamp()
SET d.data = extract(i in split(line,",") | toInt(i)) WITH d
MATCH (t:Timestamp {name: "Digital"})
CREATE (d)<-[:HAS]-(t)

【讨论】:

  • 我收到此错误 Neo.ClientError.Statement.SyntaxError: Type mismatch: Expected String but was List (line 3, column 33 (offset: 117)) "SET d.data = extract (i in split(line,") | toInt(i)) WITH d" ^
  • 使用第一个查询,因为 cypher 已经将字符串转换为列表
猜你喜欢
  • 1970-01-01
  • 2015-10-08
  • 2023-02-10
  • 2022-01-11
  • 2023-02-09
  • 1970-01-01
  • 2020-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多