【问题标题】:Error with Neo4j Import ToolNeo4j 导入工具出错
【发布时间】:2015-04-10 18:49:42
【问题描述】:

我正在尝试使用 2.2.0 的导入工具从 CSV 导入数据。 我一直在 messages.log 文件中遇到这个错误:

2015-02-10 16:14:44.792+0000 INFO  [org.neo4j]: Import starting
2015-02-10 16:14:45.032+0000 INFO  [org.neo4j]: Creating new db @ C:\path\to\file\Neo4j\test.graphdb\neostore
2015-02-10 16:14:47.727+0000 ERROR [org.neo4j]: Error during import Missing header of type START_ID
java.lang.RuntimeException: Missing header of type START_ID
    at org.neo4j.unsafe.impl.batchimport.staging.StageExecution.stillExecuting(StageExecution.java:61)
    at org.neo4j.unsafe.impl.batchimport.staging.ExecutionSupervisor.anyStillExecuting(ExecutionSupervisor.java:70)
    at org.neo4j.unsafe.impl.batchimport.staging.ExecutionSupervisor.finishAwareSleep(ExecutionSupervisor.java:93)
    at org.neo4j.unsafe.impl.batchimport.staging.ExecutionSupervisor.supervise(ExecutionSupervisor.java:55)
    at org.neo4j.unsafe.impl.batchimport.ParallelBatchImporter.executeStages(ParallelBatchImporter.java:263)
    at org.neo4j.unsafe.impl.batchimport.ParallelBatchImporter.doImport(ParallelBatchImporter.java:153)
    at org.neo4j.tooling.ImportTool.main(ImportTool.java:213)
Caused by: org.neo4j.unsafe.impl.batchimport.input.MissingHeaderException: Missing header of type START_ID
    at org.neo4j.unsafe.impl.batchimport.input.csv.DataFactories$AbstractDefaultFileHeaderParser.validateHeader(DataFactories.java:366)
    at org.neo4j.unsafe.impl.batchimport.input.csv.DataFactories$AbstractDefaultFileHeaderParser.create(DataFactories.java:315)
    at org.neo4j.unsafe.impl.batchimport.input.csv.InputGroupsDeserializer.createNestedIterator(InputGroupsDeserializer.java:65)
    at org.neo4j.unsafe.impl.batchimport.input.csv.InputGroupsDeserializer.createNestedIterator(InputGroupsDeserializer.java:35)
    at org.neo4j.helpers.collection.NestingIterator.fetchNextOrNull(NestingIterator.java:67)
    at org.neo4j.helpers.collection.PrefetchingIterator.peek(PrefetchingIterator.java:60)
    at org.neo4j.helpers.collection.PrefetchingIterator.hasNext(PrefetchingIterator.java:46)
    at org.neo4j.unsafe.impl.batchimport.staging.IteratorBatcherStep.nextOrNull(IteratorBatcherStep.java:41)
    at org.neo4j.unsafe.impl.batchimport.staging.ProducerStep.process(ProducerStep.java:72)
    at org.neo4j.unsafe.impl.batchimport.staging.ProducerStep$1.run(ProducerStep.java:54)

我尝试导入的三个文件的前五行如下所示: loctest.csv

LOCATION:ID;LOC_TYPE:int;NUM_MILE:int;STREET_PRE;STREETNAME;STREETTYPE;STREETSUF;APT_NO;X_STREET;:LABEL
895WTWELFTHST;1;895;W;TWELFTH;ST;;107;;LOCATION
145SFRANKLINST;1;145;S;FRANKLIN;ST;;;;LOCATION
11735GLACIERHWY;1;11735;;GLACIER;HWY;;;;LOCATION
MENDENHALL LOOPUNIVERSITY DRRDUNIVERSITY DR;2;;;MENDENHALL LOOPUNIVERSITY DR;RD;;;UNIVERSITY DR;LOCATION

zip5.csv

ZIP5:ID;ZIP4;:LABEL
99801;;ZIP5
99824;;ZIP5
99821;;ZIP5
99803;;ZIP5

locziptest.csv

:START_ID;CITY;:END_ID;:TYPE
895WTWELFTHST;JUNEAU;99801;CITY
145SFRANKLINST;JUNEAU;99801;CITY
11735GLACIERHWY;JUNEAU;99801;CITY
MENDENHALL LOOPUNIVERSITY DRRDUNIVERSITY DR;JUNEAU;99801;CITY

有问题的文件似乎是关系文件 (locziptest.csv),但标题看起来配置正确。 ID 字段中的查找字符串有问题吗?它需要完全是数字吗?

【问题讨论】:

  • 格式看起来像是在标题行中使用空格字符作为第一个字符 - 请检查这一点。如果这不是问题,请将您的确切命令行粘贴到 neo4j-import。
  • @StefanArmbruster 我不知道为什么,但是 SO 的格式会增加那个空间,我的文件没有它。我正在运行的命令是bin\Neo4jImport.bat --into C:\Users\path\to\db --nodes loctest.csv --nodes zip5.csv --relationships locziptest.csv
  • 不确定,但尝试添加--id-type STRING
  • @StefanArmbruster 它仍然抛出相同的错误:Missing header of type START_ID。只是不读取关系文件吗?
  • @StefanArmbruster 我尝试使用一个空的关系文件运行它,该文件中只有一个标题,但仍然出现该错误。

标签: java csv import neo4j


【解决方案1】:

我试了一下,并使用参数导入了您的示例数据:

--into graph.db --nodes loctest.csv --nodes zip5.csv --relationships locziptest.csv --delimiter ; --array-delimiter "|"

请不要引用 CSV 文件中的分号。我认为讨论是围绕命令提示符中的分号引用,也不需要引用

【讨论】:

  • 我不确定它是否正常运行。由于您的建议,导入现在似乎正在处理数据,但它只在提示符处显示“节点”。作为参考,我的文件每个大约有 100,000 行。知道应该需要多长时间吗?
  • 对于它的价值 - 它确实有效,我制作了较小的文件作为测试并且一切正常。较大的文件只需要一段时间。
  • 好吧,期望每秒增加几十万到 100 万个实体(节点或关系)并不过分乐观。
【解决方案2】:

您的 csv 使用分号作为字段分隔符。 neo4j-import 默认为逗号,所以修改你的neo4j-import 调用:

--delimiter ";" --array-delimiter ","

数组分隔符设置是必要的,因为这个默认为分号,并且两者不能相同。

【讨论】:

  • 现在我得到:Nodes Import error: Invalid digit character -16 '?' where the original char was ' '
  • 您的评论似乎是乱码。我使用 Linux 尝试了上述操作,也许 Windows 命令行需要为分号添加一些引号。
  • 我正在使用 Windows。您是说在节点 CSV 中我需要在分号周围添加引号?
  • 是的,我的直觉是 windows cmd 行在这里解释分号。在 Linux 上,上面的 bash 运行良好,图表导入时没有错误。
  • 很奇怪。现在,在我的 CSV 中用";" 替换所有; 后,我得到Import error: 'ID"'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-25
  • 2016-04-20
  • 1970-01-01
  • 2015-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多