Spark与Azure CosmosDB依赖跨版本冲突问题求助
解决Azure CosmosDB Spark依赖与Scala/Spark版本冲突问题
你遇到的是典型的跨Scala版本依赖冲突——azure-cosmosdb-spark的传递依赖中混入了Scala 2.10版本的Spark组件,和你项目使用的Scala 2.11完全不兼容,导致编译失败。下面是具体的解决步骤:
核心解决方案:强制统一依赖版本
通过sbt的dependencyOverrides功能,强制所有冲突的依赖使用与你项目Scala 2.11匹配的版本,覆盖掉cosmos依赖带来的错误版本。
修改你的build.sbt如下:
name := "ranchero" version := "0.0.1" scalaVersion := "2.11.8" val sparkVersion = "2.2.0" // additional libraries libraryDependencies ++= Seq( "org.apache.spark" %% "spark-core" % sparkVersion % "provided", "org.apache.spark" %% "spark-sql" % sparkVersion % "provided", "org.apache.spark" %% "spark-mllib" % sparkVersion % "provided", "joda-time" % "joda-time" % "2.9.9", "org.scalatest" %% "scalatest" % "3.0.0" % "test", "com.microsoft.azure" % "azure-cosmosdb-spark_2.2.0_2.11" % "1.1.0" ) resolvers ++= Seq( "apache-snapshots" at "http://repository.apache.org/snapshots/", "Maven central" at "http://repo1.maven.org/maven2/", ) // 强制统一冲突依赖的版本,匹配Scala 2.11和Spark 2.2.0 dependencyOverrides ++= Seq( "org.apache.spark" %% "spark-launcher" % sparkVersion, "org.apache.spark" %% "spark-network-shuffle" % sparkVersion, "org.apache.spark" %% "spark-unsafe" % sparkVersion, "org.apache.spark" %% "spark-core" % sparkVersion, "org.apache.spark" %% "spark-network-common" % sparkVersion, "org.json4s" %% "json4s-ast" % "3.5.3", "org.json4s" %% "json4s-jackson" % "3.5.3", "org.json4s" %% "json4s-core" % "3.5.3", "com.twitter" %% "chill" % "0.8.4", "com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.8.10" )
为什么会出现这个问题?
你使用的azure-cosmosdb-spark_2.2.0_2.11 1.1.0版本,其内部依赖的部分Spark/第三方库默认拉取了Scala 2.10的编译版本(比如spark-launcher_2.10),而你的项目用的是Scala 2.11,sbt无法同时兼容同一依赖的两个不同Scala版本,因此抛出冲突错误。
额外排查技巧
如果你想更精准定位问题来源,可以在项目根目录执行:
sbt dependencyTree
这个命令会输出完整的依赖树,你能清晰看到哪个依赖引入了Scala 2.10版本的组件,针对性地调整dependencyOverrides。
内容的提问来源于stack exchange,提问作者downer
相关产品推荐
相关产品推荐

