从Apache Spark Streaming上下文访问JAR中资源目录中的文件

时间:2016-10-26 02:17:00

标签: java apache-spark spark-streaming

我有一个我作为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群集中运行时失败。

1 个答案:

答案 0 :(得分:2)

我通过访问资源目录以另一种(并且显着不那么愚蠢)的方式修复了这个问题:

input = MyClass.class.getResourceAsStream("/my file");