【问题标题】:Reading a .sql file from local Resources when Running my job on Cluster [duplicate]在集群上运行我的作业时从本地资源中读取 .sql 文件 [重复]
【发布时间】:2021-05-10 04:03:34
【问题描述】:

在 spark/scala 中使用以下命令读取我放入资源表中的长 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,它正在运行时在集群上查找该文件。您能否告诉我应该使用什么命令才能在编译时本地读取文件?

【问题讨论】:

标签: scala apache-spark cluster-computing compile-time


【解决方案1】:

根据环境和部署应用程序的方式,您可以在运行时读取多个选项,例如:

  • 如果您希望在 cluster 部署模式下配置此文件,则应将其作为带有 --files 选项的 spark-submit 命令的一部分传递到驱动程序(和其他节点)
  • 如果您想在 spark-submit 中使用client 模式,您可以将其作为本地文件访问(您的驱动程序将在您提交申请的机器上运行)

但是,如果您真的想在编译时读取文件并将 SQL 字符串编译到您的源代码中,我宁愿研究 scala 元编程/宏的方向。 What is a simple way to define a string constant to be the contents of a file at compile-time (in Scala)?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-30
    • 2019-10-27
    • 1970-01-01
    • 2020-06-27
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多