You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Databricks Spark Submit作业传递Typesafe配置文件找不到db键问题求助

问题根因

  1. 配置加载时机错误:你当前代码中val config: Config = ConfigFactory.load("application.conf")是作为Bootstrap对象的成员变量声明的,Scala中对象的成员变量会在类加载阶段就完成初始化,此时SparkContext还未完成初始化,--files指定的配置文件还没有被下载到Driver节点的工作目录,ConfigFactory只会从Jar包内的classpath查找配置,找不到外部的application.conf就会加载默认空配置,自然找不到db键。
  2. 路径配置冗余错误:你尝试的extraClassPath配置路径不符合Databricks的文件分发逻辑,--files指定的文件会自动分发到Driver和Executor的当前工作目录,不需要额外添加到classpath。

解决方案

步骤1:修改Scala代码调整加载时机

将配置加载逻辑移到main方法内部,确保SparkSession初始化完成、配置文件已经分发到本地后再加载:

import org.slf4j.{Logger, LoggerFactory}
import com.typesafe.config.{Config, ConfigFactory}
import org.apache.spark.sql.SparkSession
 
object Bootstrap extends MyLogging {
 
 val spark: SparkSession = SparkSession.builder.enableHiveSupport().getOrCreate()
 
 def main(args: Array[String]): Unit = {
  // Spark初始化完成后再加载配置,此时--files的文件已经下载到本地工作目录
  val config: Config = ConfigFactory.load()
  val url: String = config.getString("db.url")
  val user: String = config.getString("db.user")
  println(url)
  println(user)
 }
}

步骤2:使用正确的Spark Submit参数

不需要配置extraClassPath,仅保留文件分发和JVM系统属性配置即可,正确的spark_submit_task.parameters配置如下:

[
  "--class",
  "Bootstrap",
  "--conf",
  "spark.driver.extraJavaOptions=-Dconfig.file=./application.conf",
  "--conf",
  "spark.executor.extraJavaOptions=-Dconfig.file=./application.conf",
  "--files",
  "dbfs:/tmp/application.conf",
  "dbfs:/tmp/code-assembly-0.1.0.jar"
]

补充说明

  • 如果只有Driver需要读取配置,Executor不需要用到配置项,可以去掉spark.executor.extraJavaOptions相关配置
  • 若加载仍然失败,可以在加载配置前增加调试代码,确认文件是否已经分发到当前工作目录:
    import java.io.File
    // 打印当前工作目录所有文件,确认application.conf存在
    new File(".").listFiles().foreach(f => println(s"本地文件:${f.getAbsolutePath}"))
    

内容的提问来源于stack exchange,提问作者Praveen Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 22:24:05