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

Apache Spark快速入门提交Jar包时遇scala/Serializable缺失错误求助

Spark提交Jar包时出现scala/Serializable找不到的问题

操作场景

按照Spark官方Scala版快速入门指南操作,最后一步提交Jar包时失败,执行的命令如下:

# Use spark-submit to run your application
$ YOUR_SPARK_HOME/bin/spark-submit \
  --class "SimpleApp" \
  --master local[4] \
  target/scala-2.12/simple-project_2.12-1.0.jar

报错信息

Exception in thread "main" java.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: scala/Serializable
        at SimpleApp$.main(SimpleApp.scala:9)
        at SimpleApp.main(SimpleApp.scala)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52)
        at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:958)
        at org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:180)
        at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:203)
        at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:90)
        at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:1046)
        at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:1055)
        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.NoClassDefFoundError: scala/Serializable
        ... 14 more
Caused by: java.lang.ClassNotFoundException: scala.Serializable
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 14 more

原因分析

这个异常核心是Scala标准库类无法被加载,常见触发原因有三个:

  • 项目打包时未包含Scala依赖:默认sbt打包仅包含自定义代码,不会自动打包Scala标准库和Spark依赖,导致运行时找不到核心类
  • Scala版本不匹配:项目编译用的Scala版本(如示例中的2.12)和Spark安装包自带的Scala版本不一致,引发依赖冲突或类找不到问题
  • YOUR_SPARK_HOME配置错误:环境变量指向的Spark目录不正确,导致spark-submit无法加载Spark自带的Scala依赖包

解决办法

  1. 统一Scala版本
    查看Spark版本对应的Scala版本(如Spark 3.3.x及以上默认用Scala 2.12,Spark 3.0-3.2支持2.11/2.12),修改项目build.sbt中的Scala版本与Spark保持一致,示例:

    scalaVersion := "2.12.15" // 替换为Spark自带的Scala版本
    
  2. 打包包含所有依赖
    使用sbt的assembly插件打包成包含所有依赖的fat jar,步骤如下:

    • 在project/plugins.sbt中添加插件:
      addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "1.2.0")
      
    • 执行sbt assembly命令,生成的jar包路径为target/scala-<版本>/simple-project-assembly-1.0.jar,用该包提交:
      YOUR_SPARK_HOME/bin/spark-submit \
        --class "SimpleApp" \
        --master local[4] \
        target/scala-2.12/simple-project-assembly-1.0.jar
      
  3. 检查Spark环境变量
    执行echo $YOUR_SPARK_HOME确认环境变量指向正确的Spark安装目录,查看该目录下lib文件夹是否存在scala-library-xxx.jar等Scala相关依赖包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:35:17