使用Neo4j导入本地CSV时遇"Cannot read field 'next'..."错误求助
Neo4j导入CSV时出现"Cannot read field 'next' because 'e.currentToken' is null"错误原因分析
问题详情
我最近开始学习Neo4j,第一个任务是导入本地CSV文件,执行的Cypher命令如下:
load csv from 'file:///C:\Users\TBR\Documents\us-counties.csv' as row merge (c:County{date:row[1], county: row[2], state: row[3], fips: row[4],}) set c.cases=toInteger(row[5]),c.deaths= toInteger(row[6])
执行后返回错误:
Cannot read field "next" because "e.currentToken" is null
网上找不到这个错误的相关信息,想知道错误原因。
CSV文件结构:第一列为序号,第二列是date,第三列是county,第四列是state,第五列是fips,第六列是cases,第七列是deaths。
错误原因分析
Cypher语法错误
你写的merge语句里,fips: row[4],末尾多了一个逗号,这违反了Cypher的语法规则——对象属性列表的最后一个键值对后面不能加逗号。这个语法错误会导致Neo4j的语句解析器出现异常,从而抛出这个不够直观的错误提示。文件路径格式错误
Windows系统下的文件路径在Neo4j的LOAD CSV命令里,不能直接使用单反斜杠\,因为反斜杠在字符串中是转义字符。正确的写法有两种:
- 使用正斜杠:
file:///C:/Users/TBR/Documents/us-counties.csv - 使用转义的反斜杠:
file:///C:\\Users\\TBR\\Documents\\us-counties.csv
- CSV表头处理缺失(潜在问题)
如果你的CSV文件第一行是表头(比如包含date、county这些字段名),但命令里没有加WITH HEADERS参数,会导致row[1]实际取的是第一行数据而不是表头对应的列,后续的toInteger()转换也可能出错,虽然这不是当前错误的直接原因,但也是导入时需要注意的问题。
内容的提问来源于stack exchange,提问作者FelixCrd
相关产品推荐
相关产品推荐

