我正在用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?
答案 0 :(得分:3)
这个主题存在的原因是,尽管大多数情况下源代码都是兼容的,但是scala版本不(通常是speacking)二进制兼容的。
因此,您可以使用Scala 2.10 source 并将其编译为2.11.x或2.10.x版本。但是2.10.x 已编译的二进制文件(JAR)不能在2.11.x环境中运行。
因此,正如您提到的,Spark程序包是为Scala 2.11.x运行时构建的。
这意味着您无法在以spark.apache.org构建的spark分发运行的集群/ Spark实例上运行自己的Scala 2.10.x 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")
嗯,这是基于“某种”意见的。我的建议是:选择与您的生产Spark集群匹配的scala版本。
如果您的生产Spark是从https://spark.apache.org/downloads.html下载的2.3,那么正如他们所说,它使用Scala 2.11,这也是您应该使用的。我认为,使用其他任何方法,都会为将来各种不兼容问题打开大门。
坚持您的生产需求。