我有一个我作为Spark Streaming作业编写的Java应用程序,它需要一些我已经包含在资源目录中的jar中的文本资源(使用默认的Maven目录结构)。使用单元测试我访问这些文件没有问题但是当我使用spark-submit运行我的程序时,我得到一个FileNotFoundException。使用spark-submit运行时,如何访问JAR中类路径上的文件?
我目前用来访问我的文件的代码大致如下:
InputStream input;
try {
URL url = this.getClass().getClassLoader().getResource("my file");
if (url == null) {
throw new IOException("file does not exist");
}
String path = url.getPath();
input = new FileInputStream(path);
} catch(IOException e) {
throw new RuntimeException(e);
}
感谢。
请注意,这不是Reading a resource file from within jar(已建议)的副本,因为此代码在本地运行时有效。它仅在Spark群集中运行时失败。
答案 0 :(得分:2)
我通过访问资源目录以另一种(并且显着不那么愚蠢)的方式修复了这个问题:
input = MyClass.class.getResourceAsStream("/my file");