scala—在群集上运行作业时从本地资源读取.sql文件

lzfw57am  于 2021-07-13  发布在  Spark
关注(0)|答案(1)|浏览(418)

这个问题在这里已经有了答案

从资源目录读取文件时出现scala问题(1个答案)
三个月前关门了。
在spark/scala中使用以下命令读取我放在resources表中的长sql查询。

val stream = getClass.getResourceAsStream("wbs_element.sql")
  val query = scala.io.Source.fromInputStream(stream).getLines.mkString

当我运行.assembly时,必须在编译时读取资源文件,所以我希望它能正常工作。但是,只有在本地编译/运行程序时,它才能正常工作。
在群集上,它会出现以下错误:

User class threw exception: java.io.FileNotFoundException: src/main/resources/wbs_element.sql (No such file or directory)

我猜程序仍然没有在编译时读取.sql,而是在运行时在集群中查找该文件。你能告诉我应该用什么命令在编译时本地读取文件吗?

d5vmydt9

d5vmydt91#

根据环境和应用程序的部署方式,可以在运行时读取多个选项,例如:
如果您想在中配置此文件 cluster 部署模式您应该将其作为spark submit命令的一部分传递给 --files 上载到驱动程序(和其他节点)的选项
如果你想用 client 在spark submit模式下,您可以将其作为本地文件访问(您的驱动程序将在您提交应用程序的计算机上运行)
但是,如果您真的想在编译时读取文件并将sql字符串编译到源代码中,我宁愿研究scala元编程/宏的方向。在编译时(scala中)将字符串常量定义为文件内容的简单方法是什么?

相关问题