当我制作FatJar时,在EMR中使用不同的Scala版本可以吗?

当我制作FatJar时,在EMR中使用不同的Scala版本可以吗?,scala,apache-spark,compilation,Scala,Apache Spark,Compilation,我使用的Amazon EMR包含Spark 2.1.0和Scala 2.11.8。 我想知道当我编译并制作FatJAR时,使用Scala 2.11.11可以吗?最好能够用正确的Scala版本构建您的EMR FatJAR。这并不难。我想您应该使用sbt组件来构建胖罐子。在这种情况下,将此行添加到build.sbt: crossScalaVersions:=Seq(“2.11.8”、“2.11.11”) 然后在sbt外壳类型中重新加载以激活此新设置。 然后,当您想要根据2.11.8组装胖jar时,您

我使用的Amazon EMR包含Spark 2.1.0和Scala 2.11.8。

我想知道当我编译并制作FatJAR时,使用Scala 2.11.11可以吗?

最好能够用正确的Scala版本构建您的EMR FatJAR。这并不难。我想您应该使用sbt组件来构建胖罐子。在这种情况下,将此行添加到
build.sbt
crossScalaVersions:=Seq(“2.11.8”、“2.11.11”)

然后在sbt外壳类型中重新加载以激活此新设置。 然后,当您想要根据2.11.8组装胖jar时,您可以在sbt控制台中键入以下命令:

++ 2.11.8
assembly
当您想在本地编译2.11.11或为2.11.11构建胖jar时,只需在sbt控制台中切换到该版本。例如:

++ 2.11.11
compile
我检查过了,它对我有效。以下是来自我的sbt控制台的日志:

sbt:TestAssembly> ++ 2.11.8
[info] Setting Scala version to 2.11.8 on 1 projects.
[info] Reapplying settings...
[info] Set current project to TestAssembly (in build file:/ssd2/projects/TestAssembly/)
sbt:TestAssembly> assembly
[info] Including from cache: scala-library-2.11.8.jar
[info] Checking every *.class/*.jar file's SHA-1.
[info] Merging files...
[warn] Merging 'META-INF/MANIFEST.MF' with strategy 'discard'
[warn] Strategy 'discard' was applied to a file
[info] Packaging /ssd2/projects/TestAssembly/target/scala-2.11/testStep.jar ...
[info] Done packaging.
[success] Total time: 2 s, completed Nov 29, 2017 12:07:46 PM
sbt:TestAssembly> ++ 2.11.11
[info] Setting Scala version to 2.11.11 on 1 projects.
[info] Reapplying settings...
[info] Set current project to TestAssembly (in build file:/ssd2/projects/TestAssembly/)
sbt:TestAssembly> assembly
[info] Updating {file:/ssd2/projects/TestAssembly/}testassembly...
[info] Done updating.
[info] Compiling 2 Scala sources to /ssd2/projects/TestAssembly/target/scala-2.11/classes ...
[info] Non-compiled module 'compiler-bridge_2.11' for Scala 2.11.11. Compiling...
[info]   Compilation completed in 13.098s.
[info] Done compiling.
[info] Including: scala-library-2.11.11.jar
[info] Checking every *.class/*.jar file's SHA-1.
[info] Merging files...
[warn] Merging 'META-INF/MANIFEST.MF' with strategy 'discard'
[warn] Strategy 'discard' was applied to a file
[info] SHA-1: b0a0cc7ec39ca359187a0b24f303c376b1f2d71f
[info] Packaging /ssd2/projects/TestAssembly/target/scala-2.11/testStep.jar ...
[info] Done packaging.
[success] Total time: 17 s, completed Nov 29, 2017 12:10:37 PM
sbt:TestAssembly> 

正如您所看到的,它在每种情况下都包含适当的scala库jar。

简短的答案是否定的。尝试为2.11.8制作胖jar。我不确定它是否能与sbt汇编插件一起工作,我想你可以使用它来制作胖罐子,但你可以尝试使用
crossScalaVersions
sbt设置,在此指定2.11.8和2.11.11两个版本,并在运行
程序集
任务之前,按照此处的建议,借助
++2.11.8
切换到2.11.8:谢谢您的回答。我有个问题。当我使用sbt组件构建胖Jar时,当我使用Scala版本2.11.11时,胖Jar运行良好。e、 x)在build.sbt中,scalaversation:=“2.11.11”。为什么这个胖罐子在拥有scala版本2.11.8的EMR中运行良好?你能回答一下吗?也许这可以解释这个问题的某些方面: