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

Azure Databricks简单Scala作业执行失败,求排查方案

问题:Azure Databricks运行Scala JAR作业失败

我尝试在Azure Databricks上运行一个基础Scala类作为作业,代码如下:

import org.apache.spark.sql.SparkSession

object Main {
  def main(args: Array[String]): Unit = {
    println("Hello, Databricks!")

    val spark = SparkSession.builder
      .appName("Hello DAtabricks")
      .getOrCreate()

    try {} finally {
      spark.stop
    }
  }
}

build.sbt配置:

scalaVersion := "2.12.18"
libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-sql" % "3.4.0" % Provided
)

操作步骤:使用sbt assembly生成uberjar,在Databricks创建JAR任务并上传该JAR执行,作业失败。作业输出包含Log4j日志及标准错误日志。

请问我可能哪里操作出错了?


排查方向及解决方法

1. 主类未正确指定

Databricks作业必须明确指定主类的完整路径:

  • 如果Main对象在默认包下,作业配置的Main class字段需填写Main;若在自定义包中(如com.demo),则需填写com.demo.Main。
  • 检查作业配置页面的主类字段是否与代码中的类路径一致。

2. 打包时未设置主类

sbt assembly默认不会自动配置主类,需在build.sbt中显式声明:

mainClass := Some("Main") // 若有包名则替换为完整路径

执行sbt clean assembly重新打包,确保过程无报错。

3. Spark版本不兼容

Azure Databricks集群的Spark版本需与依赖版本(3.4.0)匹配:

  • 查看集群运行时版本:Databricks Runtime 13.x对应Spark 3.4.x,若集群使用更低版本(如12.x对应Spark 3.3.x),会引发类冲突。
  • 解决方案:要么调整build.sbt中的Spark版本适配集群,要么升级集群到对应Spark版本的运行时。

4. UberJar打包了Provided依赖

即使标记了Spark依赖为Provided,sbt assembly仍可能将其打包进JAR,与集群自带Spark类库冲突。需添加合并策略排除冲突文件:

assemblyMergeStrategy in assembly := {
  case PathList("META-INF", _*) => MergeStrategy.discard
  case _ => MergeStrategy.first
}

5. JAR文件上传或权限问题

  • 确认JAR已成功上传至Databricks工作区,且作业使用的服务账号拥有该文件的读取权限。
  • 尝试重新上传JAR后再次执行作业。

内容的提问来源于stack exchange,提问作者Dan Corneanu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 19:32:09