如何为我的Spark程序选择Scala版本?

时间:2018-12-19 08:55:22

标签: scala apache-spark

我正在用IDEA开发我的第一个Spark应用程序。

在我的集群中,Spark的版本为2.1.0,Scala的版本为2.11.8。

http://spark.apache.org/downloads.html告诉我:“从2.0版开始,默认情况下,Spark是使用Scala 2.11构建的。Scala2.10用户应下载Spark源软件包并使用Scala 2.10的支持进行构建。”

所以这是我的问题:“ Scala 2.10用户应下载Spark源码包并使用Scala 2.10支持进行构建”是什么意思?为什么不使用Scala 2.1.1版本?

另一个问题:我可以选择哪个版本的Scala?

1 个答案:

答案 0 :(得分:3)

首先说一下“为什么”。

这个主题存在的原因是,尽管大多数情况下源代码都是兼容的,但是scala版本不(通常是speacking)二进制兼容的。

因此,您可以使用Scala 2.10 source 并将其编译为2.11.x或2.10.x版本。但是2.10.x 已编译的二进制文件(JAR)不能在2.11.x环境中运行。

您可以read more on the subject

火花分布

因此,正如您提到的,Spark程序包是为Scala 2.11.x运行时构建的。

这意味着您无法在以spark.apache.org构建的spark分发运行的集群/ Spark实例上运行自己的Scala 2.10.x JAR。

将起作用的是:

  • 您为scala 2.11.x编译JAR并保持相同的火花
  • 您为Scala 2.10重新编译Spark并保持JAR不变

您有什么选择

为Scala 2.11(而不是2.10)编译自己的JAR通常比在其自身中编译Spark容易得多(要弄清很多依赖项)。

通常,您的Scala代码是使用sbt构建的,并且sbt可以针对特定的scala版本,例如,参见this thread on SO。只需指定:

scalaVersion in ThisBuild := "2.10.0"

您还可以使用sbt to "cross build",即为不同的scala版本构建不同的JAR。

crossScalaVersions := Seq("2.11.11", "2.12.2")

如何选择Scala版本

嗯,这是基于“某种”意见的。我的建议是:选择与您的生产Spark集群匹配的scala版本。

如果您的生产Spark是从https://spark.apache.org/downloads.html下载的2.3,那么正如他们所说,它使用Scala 2.11,这也是您应该使用的。我认为,使用其他任何方法,都会为将来各种不兼容问题打开大门。

坚持您的生产需求。