从 Apache Spark Streaming 上下文访问 JAR 中资源目录中的文件
Posted
技术标签:
【中文标题】从 Apache Spark Streaming 上下文访问 JAR 中资源目录中的文件【英文标题】:Access files in resources directory in JAR from Apache Spark Streaming context 【发布时间】:2016-10-26 02:17:00 【问题描述】:我有一个作为 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 集群中运行时才会失败。
【问题讨论】:
这与 Spark 或 Streaming 无关,这是纯 java 代码。 ***.com/questions/20389255/…的可能重复 没有。以上在正常运行时有效。使用 spark-submit 运行时失败。因此,引发问题。 【参考方案1】:我通过以不同的方式(并且明显不那么愚蠢)访问资源目录来解决此问题:
input = MyClass.class.getResourceAsStream("/my file");
【讨论】:
我也有同样的问题。 Settings 类来自哪里以及如何提取文件路径(发送到构建 sparkContext 的 newAPIHadoopFile)? 啊,我应该更清楚。设置只是我使用的类。将其替换为您正在编写代码的任何类。编辑答案以使其更清楚。以上是关于从 Apache Spark Streaming 上下文访问 JAR 中资源目录中的文件的主要内容,如果未能解决你的问题,请参考以下文章
从Spark Streaming到Apache Flink: 实时数据流在爱奇艺的演进