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

Scala 2.13搭配Spark3.3.0用MSSQL连接器报NoSuchMethodError求解决

Scala 2.13 + Spark 3.3.0 下 MSSQL 插入报错的解决办法

这个NoSuchMethodError本质是Scala 2.12与2.13的集合API二进制不兼容导致的。你使用的MSSQL Spark连接器基于Scala 2.12编译,其中调用了scala.collection.immutable.Map.$plus方法,但Scala 2.13对集合API做了底层调整,该方法的签名和实现已发生变化,导致运行时无法找到对应方法。

以下是可行的解决办法:

方案1:使用Spark原生JDBC写入(最推荐)

放弃专用的MSSQL Spark连接器,直接用Spark自带的JDBC数据源。Spark 3.3.0对Scala 2.13的支持完善,原生JDBC可直接适配,无需额外依赖。

替换后的代码示例:

import org.apache.spark.sql.SaveMode

df.write
  .format("jdbc")
  .mode(SaveMode.Append)
  .option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver")
  .option("url", jdbcUrl)
  .option("dbtable", "mytable")
  .option("user", "你的数据库用户名")
  .option("password", "你的数据库密码")
  .option("batchsize", "1000") // 可选,调整批量插入大小优化性能
  .save()

注意:原生JDBC不支持MSSQL连接器的部分高级特性(如分区并行写入、自动schema映射优化),但基础的插入、更新功能完全可用。

方案2:自行编译适配Scala 2.13的连接器版本

如果必须使用专用连接器的高级特性,可以自行修改源码编译适配Scala 2.13:

  • 获取MSSQL Spark连接器的官方源码
  • 修改项目构建文件(如sbt的build.sbt),将Scala版本改为2.13.8(与Spark 3.3.0兼容的版本),同时调整Spark依赖版本为3.3.0
  • 修复源码中Scala 2.13不兼容的代码(主要是集合API的变化,比如调整Map + (key -> value)这类写法的实现)
  • 执行编译命令生成适配Scala 2.13的jar包,替换项目中原来的连接器依赖

方案3:临时降级Scala到2.12

如果以上方案都无法实施,降级Scala到2.12是最省心的临时方案——连接器本身就是为Scala 2.12编译的,完全兼容,不会出现API不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:22:14