Scala / Spark版本兼容性

时间:2017-05-10 03:53:20

标签: scala apache-spark

我正在构建我的第一个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库可以在Scala 2.12.1应用程序中使用/调用2.11.x。我是对的吗?

3 个答案:

答案 0 :(得分:21)

Scala不向后兼容,正如您所假设的那样。你必须使用带有spark的scala 2.11,除非你在scala 2.12下重建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版本。

答案 1 :(得分:0)

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

scalaVersion := "2.11.12"

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

答案 2 :(得分:0)

我使用了这些版本的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提及的版本。