【问题标题】:Scala/Spark version compatibilityScala/Spark 版本兼容性
【发布时间】:2017-10-08 13:29:25
【问题描述】:

我正在构建我的第一个 spark 应用程序。

http://spark.apache.org/downloads.html 告诉我 Spark 2.x 是针对 Scala 2.11 构建的。

在 Scala 网站 https://www.scala-lang.org/download/all.html 我看到的是 2.11.0 - 2.11.11 的版本

所以这是我的问题:Spark 网站上的 2.11 究竟是什么意思。它是 2.11.0 - 2.11.11 范围内的任何 Scala 版本吗?

另一个问题:我可以使用最新的 Scala 2.12.2 构建我的 Spark 应用程序吗?我假设 Scala 是向后兼容的,因此使用 Scala 构建的 Spark 库说 2.11.x 可以在 Scala 2.12.1 应用程序中使用/调用。我说的对吗?

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    Scala 不向后兼容,如您所料。除非您在 scala 2.12 下重建 spark,否则您必须将 scala 2.11 与 spark 一起使用(如果您想使用最新的 Scala 版本,这是一个选项,但需要更多工作才能使一切正常运行)。

    在考虑兼容性时,需要同时考虑源代码兼容性和二进制兼容性。 Scala 确实倾向于源代码向后兼容,因此您可以在较新版本下重建 jar,但它不是二进制向后兼容,因此您不能使用旧版本构建的 jar 和新版本的代码。

    这只是主要版本,因此 scala 2.10、2.11、2.12 等都是主要版本并且不兼容二进制(即使它们是源兼容的)。虽然在主要版本中保持了兼容性,但 Scala 2.11 与所有版本 2.11.0 - 2.11.11 兼容(以及任何未来的 2.11 修订版也将兼容)

    正是由于这个原因,您将看到大多数 Scala 库针对每个主要 Scala 版本都有单独的版本。您必须确保您使用的任何库都为您正在使用的版本提供了一个 jar,并且您使用该 jar 而不是其他版本的 jar。如果您使用 SBT %% 将为您选择正确的版本,但使用 maven 您需要确保使用正确的工件名称。这些版本通常以 _2.10、_2.11 和 _2.12 开头,指的是构建 jar 的 scala 版本。

    【讨论】:

    • 我想至少使用 Spark 2.0,因为这是第一个具有我需要的模型保存和加载功能的版本。那么我需要什么版本的 Scala,在哪里可以找到呢?
    • @PaulReiners 最新版本 2.1.1 是为 Scala 2.11 分发的。如果你想要 Scala 2.12,你可以从源代码为那个 Scala 版本构建 spark。 spark 主页在几个地方提到了最新版本的 Scala 版本,但我没有看到任何官方兼容性表。您当然可以只查看包名称,尽管它们遵循将它们兼容的 Scala 版本附加到工件 ID 的标准约定。
    【解决方案2】:

    对于想要快速入门的任何人,这是我使用的版本控制对。

    scalaVersion := "2.11.12"
    
    libraryDependencies ++= Seq(
      "org.apache.spark" %% "spark-core" % "2.3.2",
      "org.apache.spark" %% "spark-sql" % "2.3.2"
    )
    

    【讨论】:

      【解决方案3】:

      我使用了这些版本的 Scala 和 Spark,它可以满足我的需要:

      scalaVersion := "2.12.8"
      libraryDependencies += "org.apache.spark" %% "spark-hive" % "2.4.0"
      libraryDependencies += "org.apache.spark" %% "spark-core" % "2.4.0"
      

      有些库需要 2.11 版本的 Scala,在这种情况下应该使用 @the775 提到的版本。

      注意:这是一个旧答案,现在不再可用,因为存在更新版本的 Scala 和 Spark。

      【讨论】:

        猜你喜欢
        • 2018-08-31
        • 2018-03-11
        • 2018-03-11
        • 2019-01-28
        • 2016-02-20
        • 1970-01-01
        • 2021-12-25
        • 2019-08-27
        • 2016-02-26
        相关资源
        最近更新 更多