【问题标题】:Using Scala 2.12 with Spark 2.x将 Scala 2.12 与 Spark 2.x 一起使用
【发布时间】:2017-08-10 18:32:19
【问题描述】:

在 Spark 2.1 docs 中提到

Spark 可在 Java 7+、Python 2.6+/3.4+ 和 R 3.1+ 上运行。对于 Scala API,Spark 2.1.0 使用 Scala 2.11。您需要使用兼容的 Scala 版本 (2.11.x)。

在 Scala 2.12 release news 中还提到:

虽然 Scala 2.11 和 2.12 大多是源代码兼容的以促进交叉构建,但它们不是二进制兼容的。这使我们能够不断改进 Scala 编译器和标准库。

但是当我构建一个 uber jar(使用 Scala 2.12)并在 Spark 2.1 上运行它时。一切正常。

我知道它不是任何官方来源,但在 47 degree blog 他们提到 Spark 2.1 确实支持 Scala 2.12。

如何解释这些(冲突?)信息?

【问题讨论】:

  • 有一个正式的区别,即“我们支持那个版本,我们已经测试过了,如果你有问题,那是我们这边的一个错误” vs. “按照你的方式去做,如果你愿意,可以尝试,但如果你有问题,不要回来抱怨”.
  • 是的,但是如果 scala 2.11 与 2.12 二进制不兼容,它怎么能工作?
  • 不兼容意味着至少存在 1 个问题。 99.99% 的 API 调用都可以。您使用自定义 Uber-JAR 测试了多少?也许 15%?

标签: scala apache-spark abi binary-compatibility


【解决方案1】:

Spark 支持 Scala 2.12。您可以关注SPARK-14220针对 Scala 2.12 构建和测试 Spark)以获取最新状态。

更新Spark 2.4 added 实验性 Scala 2.12 支持。

【讨论】:

  • 可以添加为评论
  • Spark 2.4 现在实验性地支持 Scala 2.12。
  • 2.12 支持不再是实验性的 - 现在是 GA - 请参阅 Spark 2.4.1 release notes
  • Scala 2.12 可能受支持,但从Spark 2.4.x 开始,pre-built binaries 使用Scala 2.11 编译(除了版本2.4.2)。
【解决方案2】:

为了补充答案,我相信这是一个错字https://spark.apache.org/releases/spark-release-2-0-0.html 没有提到 scala 2.12。

此外,如果我们看一下 Scala 2.12 直到 2016 年 11 月才发布,Spark 2.0.0 于 2016 年 7 月发布的时间安排。

参考资料: https://spark.apache.org/news/index.html

www.scala-lang.org/news/2.12.0/

【讨论】:

    【解决方案3】:

    Scala 2.12 从 Spark 3 开始得到正式支持(并且是必需的)。总结:

    • Spark 2.0 - 2.3:需要 Scala 2.11
    • Spark 2.4:支持 Scala 2.11 和 Scala 2.12,但并不是真的导致几乎所有运行时都只支持 Scala 2.11。
    • Spark 3:仅支持 Scala 2.12

    使用使用一个 Scala 版本编译的 Spark 运行时和使用另一个 Scala 版本编译的 JAR 文件是危险的,并且会导致奇怪的错误。例如,如 here 所述,在 Spark 3 集群上使用 Scala 2.11 编译的 JAR 将导致此错误:java.lang.NoSuchMethodError: scala.Predef$.refArrayOps([Ljava/lang/Object;)Lscala/collection/mutable/ArrayOps

    看看at all the poor Spark users 遇到了这个错误。

    确保查看 Scala 交叉编译并了解 SBT 中的 %% 运算符以减少您的痛苦。维护 Scala 项目很困难,建议尽量减少依赖项。

    【讨论】:

      猜你喜欢
      • 2015-12-18
      • 2022-07-30
      • 2017-05-13
      • 1970-01-01
      • 1970-01-01
      • 2016-08-27
      • 1970-01-01
      • 2015-07-15
      • 1970-01-01
      相关资源
      最近更新 更多