升级Java17与Scala2.13后scala.Serializable找不到的问题排查
定位Scala 2.13中
scala.Serializable缺失问题的排查步骤 在将Java从11升级到17、Scala从2.12切换到2.13后,运行EMR Spark应用时出现scala.Serializable找不到的错误,可通过以下步骤定位问题:
确认Scala库依赖的正确性
- 检查pom.xml中
scala-library依赖的版本是否明确指定为2.13.x,且scope设置合理(若EMR Spark未自带兼容的Scala版本,需设为compile而非provided)。 - 执行
mvn dependency:tree -Dverbose,重点搜索scala-library的resolved版本,排查是否存在第三方依赖传递引入Scala 2.12的情况(verbose模式会显示版本冲突及最终生效的版本)。
- 检查pom.xml中
验证编译类路径中的Scala jar
- 运行
mvn dependency:build-classpath,从输出的类路径中找到scala-library对应的jar包路径。 - 解压该jar包,检查是否存在
scala/Serializable.class文件(Scala 2.13中该类仍存在,仅标记为废弃,若缺失则说明jar版本错误或损坏)。
- 运行
检查Spark与Scala的版本兼容性
- 确认EMR集群的Spark版本是否支持Scala 2.13:Spark 3.0及以上版本才正式支持Scala 2.13,若使用低版本Spark,切换Scala 2.13必然会出现类缺失问题。
- 排查Spark作业提交参数,比如
--conf spark.driver.extraClassPath或--conf spark.executor.extraClassPath是否误引入了Scala 2.12的jar包。
检查代码导入与替代方案
- 查看报错的
SparkJobTest.java第28行,若导入的是scala.Serializable,可直接替换为java.io.Serializable(Scala 2.13已废弃scala.Serializable,推荐使用Java原生序列化接口)。
- 查看报错的
清理缓存并重新编译
- 执行
mvn clean install -U,强制更新依赖并清理本地Maven仓库中可能缓存的旧版本Scala jar,避免缓存导致的版本不一致问题。
- 执行
排查IDE编译环境(若使用IDE开发)
- 检查IDE的Project Structure中,Scala SDK版本是否统一为2.13;确认Maven Profiles未激活包含Scala 2.12配置的选项。
内容的提问来源于stack exchange,提问作者RMSD
相关产品推荐
相关产品推荐

