【问题标题】:Cross-Version Conflicts with Spark and Azure-CosmosdbSpark 和 Azure-Cosmosdb 的跨版本冲突
【发布时间】:2018-05-23 23:01:02
【问题描述】:

我一直在努力解决这个问题有一段时间了,我被正式卡住了。我正在尝试编译一个包含在 Azure Databricks 上运行的简单 scala/spark 作业的 jar,包括对 CosmosDB 的依赖。导入azure-cosmosdb-spark 在编译期间引入了冲突的跨版本错误,我认为这是某些传递依赖的结果。我尝试了许多不同的 spark 和 scala 版本,但没有任何帮助,而且错误消息并不能说明太多。

我重现错误的最小示例只是 build.sbt,目前没有编译任何 scala 类。我的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/",
 )

如果我注释掉 cosmosdb 依赖项,一切都会编译得很好。添加该 dep 后,我得到了类似的错误:

[error] Modules were resolved with conflicting cross-version suffixes in {file:/home/*******/development/ranchero/}ranchero:
[error]    org.apache.spark:spark-launcher _2.10, _2.11
[error]    org.json4s:json4s-ast _2.10, _2.11
[error]    org.apache.spark:spark-network-shuffle _2.10, _2.11
[error]    com.twitter:chill _2.10, _2.11
[error]    org.json4s:json4s-jackson _2.10, _2.11
[error]    com.fasterxml.jackson.module:jackson-module-scala _2.10, _2.11
[error]    org.json4s:json4s-core _2.10, _2.11
[error]    org.apache.spark:spark-unsafe _2.10, _2.11
[error]    org.apache.spark:spark-core _2.10, _2.11
[error]    org.apache.spark:spark-network-common _2.10, _2.11
[error] java.lang.RuntimeException: Conflicting cross-version suffixes in: org.apache.spark:spark-launcher, org.json4s:json4s-ast, org.apache.spark:spark-network-shuffle, com.twitter:chill, org.json4s:json4s-jackson, com.fasterxml.jackson.module:jackson-module-scala, org.json4s:json4s-core, org.apache.spark:spark-unsafe, org.apache.spark:spark-core, org.apache.spark:spark-network-common

不幸的是,这并没有提供太多帮助。有关如何纠正此问题的任何建议?

【问题讨论】:

    标签: scala azure apache-spark sbt azure-cosmosdb


    【解决方案1】:

    让 sbt 处理所有依赖项的 scala 版本。尝试用这个替换 azure-cosmosdb 依赖:

    "com.microsoft.azure" %% "azure-cosmosdb-spark_2.2.0" % "1.1.0"
    

    双百分比将告诉 sbt 处理依赖项的 scala 版本标记。至少 sbt shell 以正确的 build.sbt 开头。

    【讨论】:

      【解决方案2】:

      虽然我同意通过%% 处理 Scala 版本,但这对我来说还不够。我终于设法通过手动从 CosmosDB 库中排除有问题的依赖项来使其工作

      "com.microsoft.azure" %% "azure-cosmosdb-spark_2.2.0" % "1.1.1"
         exclude ("org.apache.spark", "spark-launcher_2.10")
         exclude ("org.json4s", "json4s-ast_2.10")
         exclude ("org.apache.spark", "spark-network-shuffle_2.10")
         exclude ("com.twitter", "chill_2.10")
         exclude ("org.json4s", "json4s-jackson_2.10")
         exclude ("com.fasterxml.jackson.module", "jackson-module-scala_2.10")
         exclude ("org.json4s", "json4s-core_2.10")
         exclude ("org.apache.spark", "spark-unsafe_2.10")
         exclude ("org.apache.spark", "spark-core_2.10")
         exclude ("org.apache.spark", "spark-network-common_2.10")
      

      这假设您在项目中使用 Scala 2.11。我没有解释为什么这是必要的。也许 Maven 上的 2.11 CosmosDB 库由于某种原因链接到 2.10 依赖项...

      【讨论】:

        猜你喜欢
        • 2019-01-15
        • 1970-01-01
        • 2019-06-21
        • 2016-10-17
        • 1970-01-01
        • 1970-01-01
        • 2020-03-10
        • 1970-01-01
        • 2015-02-23
        相关资源
        最近更新 更多