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

标签 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 集群中运行时失败。

最佳答案

我通过一种不同的(并且明显不那么愚蠢)的方式访问资源目录来解决这个问题:

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

关于java - 从 Apache Spark Streaming 上下文访问 JAR 资源目录中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40252652/

相关文章:

java - 从 freemarker 列表中获取最后一条记录

apache-spark - 如何在本地模式下运行 Spark SQL Thrift Server 并使用 JDBC 连接到 Delta

hadoop - 如何知道在 YARN 客户端模式下带有 spark-shell 的 ClosedChannelException 的原因是什么?

database - Spark 流 : Reading and writing state info to external database like cassandra

java - 使用 Apache Spark SQL 和 Java 直接运行 sql 查询

java - 有没有办法从 Spark 流作业中读取 Kafka 流中的特定偏移量?

Java 基础正则表达式 : get value of both placeholders

java - AES 解密错误 : android pad block corrupted

Java 并发 : thread-safe modification of values in maps

postgresql - 将 Parquet 文件存储到 PostgreSQL 数据库中