我用Java编写了一个Spark作业,将其打包成shaded jar并执行:
spark-submit my-jar.jar
在代码中,有一些文件(Freemarker模板)存储在src/main/resources/templates
中。当在本地运行时,我能够访问这些文件:
File[] files = new File("src/main/resources/templates/").listFiles();
当作业在集群上运行时,执行前一行会返回空指针异常。
如果我运行jar tf my-jar.jar
,我可以看到文件被打包在templates/
文件夹中:
[...]
templates/
templates/my_template.ftl
[...]
我只是无法阅读它们;我怀疑.listFiles()
试图访问集群节点上的本地文件系统,但文件不存在。
我想知道如何打包文件以在自包含的Spark作业中使用。 我不想在作业之外将它们复制到HDFS,因为这会变得混乱难维护。