我用Java写了一个Spark工作.该作业打包为阴影jar并执行:
spark-submit my-jar.jar
Run Code Online (Sandbox Code Playgroud)
在代码中,有一些文件(Freemarker模板)驻留在src/main/resources/templates
.在本地运行时,我可以访问文件:
File[] files = new File("src/main/resources/templates/").listFiles();
Run Code Online (Sandbox Code Playgroud)
在集群上运行作业时,执行上一行时将返回空指针异常.
如果我运行,jar tf my-jar.jar
我可以看到文件打包在一个templates/
文件夹中:
[...]
templates/
templates/my_template.ftl
[...]
Run Code Online (Sandbox Code Playgroud)
我只是无法阅读它们; 我怀疑.listFiles()
尝试访问群集节点上的本地文件系统,并且文件不存在.
我很想知道如何打包要在自包含的Spark作业中使用的文件.我不想在工作之外将它们复制到HDFS,因为维护变得很麻烦.
Oli*_*ain 10
您现有的代码将它们作为未打包并发送到Spark节点的文件引用.但是,因为它们在你的jar文件中,你应该能够通过它来引用它们Foo.getClass().getResourceAsStream("/templates/my_template_ftl")
.有关Java资源流的更多信息,请访问:http://www.javaworld.com/article/2077352/java-se/smartly-load-your-properties.html
Cra*_*son 10
似乎在Spark上运行Scala(2.11)代码不支持访问着色jar中的资源.
执行此代码:
var path = getClass.getResource(fileName)
println("#### Resource: " + path.getPath())
Run Code Online (Sandbox Code Playgroud)
在Spark外部运行时打印预期的字符串.
在Spark中运行时,java.lang.NullPointerException
会引发a ,因为path为null.
归档时间: |
|
查看次数: |
7243 次 |
最近记录: |