Spark Scala读取JSON文件时遭遇Jackson版本不兼容问题
解决Spark 2.4.0与Jackson版本冲突问题
问题原因
Spark 2.4.0本身内置依赖的Jackson版本是2.6.7,你手动引入的Jackson版本虽同为2.6.x,但项目中可能存在其他依赖(如第三方库、插件)偷偷引入了更高版本的Jackson(报错里的2.11.2),导致类加载时出现版本不兼容冲突。
解决方案
方案1:移除手动添加的Jackson依赖(推荐)
Spark的spark-core和spark-sql已经包含了兼容的Jackson相关依赖,无需手动声明。修改你的sbt配置如下:
"org.apache.spark" %% "spark-core" % "2.4.0", "org.apache.spark" %% "spark-sql" % "2.4.0", "org.apache.spark" %% "spark-streaming" % "2.4.0"
这样会直接使用Spark自带的Jackson 2.6.7,避免版本冲突。
方案2:强制统一Jackson版本(若必须手动引入)
如果项目确实需要额外引入Jackson模块,需强制所有依赖使用Spark兼容的2.6.7版本,同时排除其他依赖带来的高版本Jackson。修改sbt配置:
// Spark依赖,排除自带的Jackson以统一版本 "org.apache.spark" %% "spark-core" % "2.4.0" exclude ("com.fasterxml.jackson.core", "jackson-databind") exclude ("com.fasterxml.jackson.core", "jackson-core") exclude ("com.fasterxml.jackson.module", "jackson-module-scala_2.11"), "org.apache.spark" %% "spark-sql" % "2.4.0" exclude ("com.fasterxml.jackson.core", "jackson-databind") exclude ("com.fasterxml.jackson.core", "jackson-core") exclude ("com.fasterxml.jackson.module", "jackson-module-scala_2.11"), "org.apache.spark" %% "spark-streaming" % "2.4.0" exclude ("com.fasterxml.jackson.core", "jackson-databind") exclude ("com.fasterxml.jackson.core", "jackson-core") exclude ("com.fasterxml.jackson.module", "jackson-module-scala_2.11"), // 统一引入兼容的Jackson版本 "com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.6.7.1", "com.fasterxml.jackson.core" % "jackson-databind" % "2.6.7", "com.fasterxml.jackson.core" % "jackson-core" % "2.6.7"
同时可添加强制版本规则,确保所有依赖都使用指定版本:
dependencyOverrides ++= Seq( "com.fasterxml.jackson.core" % "jackson-core" % "2.6.7", "com.fasterxml.jackson.core" % "jackson-databind" % "2.6.7", "com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.6.7.1" )
验证依赖
执行sbt dependencyTree命令查看依赖树,确认所有Jackson相关依赖的版本均为2.6.7,无2.11.2版本出现,即可解决冲突。
内容的提问来源于stack exchange,提问作者Hannah
相关产品推荐
相关产品推荐

