这个问题在这里已经有了答案:
从资源目录读取文件时出现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,而是在运行时在集群中查找该文件。你能告诉我应该用什么命令在编译时本地读取文件吗?
1条答案
按热度按时间d5vmydt91#
根据环境和应用程序的部署方式,可以在运行时读取多个选项,例如:
如果您想在中配置此文件
cluster
部署模式您应该将其作为spark submit命令的一部分传递给--files
上载到驱动程序(和其他节点)的选项如果你想用
client
在spark submit模式下,您可以将其作为本地文件访问(您的驱动程序将在您提交应用程序的计算机上运行)但是,如果您真的想在编译时读取文件并将sql字符串编译到源代码中,我宁愿研究scala元编程/宏的方向。在编译时(scala中)将字符串常量定义为文件内容的简单方法是什么?