【问题标题】:ETL loader throws FileNotFoundException: error loading json fileETL 加载程序抛出 FileNotFoundException:加载 json 文件时出错
【发布时间】:2016-07-21 21:29:55
【问题描述】:

我正在尝试让 ETL 加载程序在 OSX 机器 (10.11.6) 上的 OrientDB 2.2.5 上工作,但我在输入 JSON 文件上不断收到 FileNotFoundException...

我要离开 example,可以在 post.csv 和 post.json 文件的教程中找到它。我修改了它们以删除路径,因为它们与我自己的路径结构不太一致。

这是我的 post.csv:

id,title
10,NoSQL movement
20,New Orientdb

post.json 文件:

{
  "source": { "file": { "path": "post.csv" } },
  "extractor": { "csv": {} },
  "transformers": [
    { "vertex": { "class": "Post" } }
  ],
  "loader": {
    "orientdb": {
       "dbURL": "plocal:dbtest",
       "dbType": "graph",
       "classes": [
         {"name": "Post", "extends": "V"},
         {"name": "Comment", "extends": "V"},
         {"name": "HasComments", "extends": "E"}
       ], "indexes": [
         {"class":"Post", "fields":["id:integer"], "type":"UNIQUE" }
       ]
    }
  }
}

我将环境变量 ORIENTDB_HOME 设置为 orientdb-community-2.2.4 所在的位置,并且 $ORIENTDB_HOME/bin 在我的路径中。

如果我输入以下内容:

$ oetl.sh post.json

输出是这样的:

OrientDB etl v.2.2.4 (build 2.2.x@rf5282664db9300ef3358fb4d7e2066ad418c2e61; 2016-07-08 12:30:59+0000) www.orientdb.com
Exception in thread "main" com.orientechnologies.orient.core.exception.OConfigurationException: Error on loading config file: post.json
    at com.orientechnologies.orient.etl.OETLProcessor.parseConfigAndParameters(OETLProcessor.java:131)
    at com.orientechnologies.orient.etl.OETLProcessor.main(OETLProcessor.java:108)
Caused by: java.io.FileNotFoundException: post.json (No such file or directory)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at com.orientechnologies.common.io.OIOUtils.readFileAsString(OIOUtils.java:140)
    at com.orientechnologies.orient.etl.OETLProcessor.parseConfigAndParameters(OETLProcessor.java:120)
    ... 1 more

我不确定正确的修复方法是什么...我的问题似乎与另一个 previously asked question 相似,但该修复方法对我不起作用,因为我在任何路径中都没有空格。我已经尝试在配置文件中设置绝对路径,但这并没有改变任何东西。

我正在从我的posts.json 和posts.csv 文件所在的目录运行oetl.sh,但它似乎仍然无法找到posts.json。

更新:两个文件(posts.json、posts.csv)位于同一目录中。我曾尝试运行 oetl.sh 以及 oetl.sh posts.json,但异常不断发生。我也尝试过编辑 posts.json 以便它也有完整的绝对路径并且不会改变结果。

任何帮助将不胜感激...我认为这可能是某种 java 配置问题,但我对 Java 比较陌生,所以我可能错过了一些环境变量或其他什么?

【问题讨论】:

  • 您的 post.json 在哪里?正如异常所说,问题肯定出在路径的某个地方。
  • 尝试使用绝对路径,例如/User/myname/adirectory/input.csv

标签: java orientdb orientdb2.2 orientdb-etl


【解决方案1】:

我想我已经解决了...为存档目的添加答案。

我的 PATH 中有 orientdb-community-2.2.4/bin 目录,并试图从包含我的 post.json 和 post.csv 的目录中运行。

oetl.sh 脚本首先将其工作目录更改为脚本位置:

#!/bin/sh
#
# Copyright (c) 2014 Luca Garulli 
#

#set current working directory
cd `dirname $0`

...

因此,当 oetl.sh 执行实际的 java 代码时,它使用工作目录 $ORIENTDB_HOME/bin 而不是用户 shell 中的当前工作目录。这意味着 post.json 文件必须在命令行中指定其绝对路径。另外,post.json 文件中列出的 post.csv 文件也需要有它的绝对路径。

我可以注释掉 cd dirname $0 行并且脚本工作正常,所以我不确定脚本中该行的真正值是什么。 /耸肩

【讨论】:

    猜你喜欢
    • 2015-04-06
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多