我正在构建我的第一个火花应用程序,并使用Idea开发。
在我的群集中,Spark的版本为2.1.0,Scala的版本为2.11.8。
http://spark.apache.org/downloads.html告诉我:"启动版2.0,Spark是用Scala 2.11构建的。Scala2.10用户应下载Spark Source软件包,并使用Scala 2.10支持构建"。
所以这是我的问题:" Scala 2.10用户应该下载Spark Source软件包并使用Scala 2.10支持"的含义是什么?为什么不使用Scala 2.1.1版本?
另一个问题:我可以选择哪种版本的Scala?
首先关于"为什么"。
这个主题存在的原因是Scala版本不是(通常是刺激)二进制兼容的,尽管大多数情况下,源代码是兼容的。
。因此,您可以使用Scala 2.10 source 并将其编译为2.11.x或2.10.x版本。但是2.10.x 编译的二进制文件(罐)无法在2.11.x环境中运行。
您可以了解有关该主题的更多信息。
火花发行
因此,您提到的Spark软件包是为Scala 2.11.x运行时间构建的。
这意味着您无法在使用Spark.apache.org构建的Spark的群集/Spark实例上运行Scala 2.10.x罐子。
有效的是:
- 您为Scala 2.11.x编译罐子,并保持相同的火花
- 您为Scala 2.10重新编译火花,并保持罐子
您的选择是什么
为Scala 2.11而不是2.10编译自己的罐子通常比在本身中编译火花要容易得多(很多依赖性要正确)。
通常,您的Scala代码是使用SBT构建的,SBT可以针对特定的Scala版本,例如,请参见此线程。这是指定的问题:
scalaVersion in ThisBuild := "2.10.0"
您也可以使用SBT进行"交叉构建",也就是说,为不同的Scala版本构建不同的罐子。
crossScalaVersions := Seq("2.11.11", "2.12.2")
如何选择Scala版本
好吧,这是基于"一种"意见。我的建议是:选择与您的生产Spark群集相匹配的Scala版本。
如果您的生产火花是2.3从https://spark.apache.org/downloads.html下载,则如他们所说,它使用Scala 2.11,这也应该使用。在我看来,使用其他任何东西,只需在道路上敞开大门。
坚持您的生产所需的东西。