摘自“SBT for Scala入门”作者:Shiti Saxena
为什么我们需要派生JVM? 当用户使用运行或控制台命令运行代码时,代码将在与SBT相同的虚拟机上运行。在某些情况下,运行代码可能会导致SBT崩溃,例如System.exit调用或未终止的线程(例如,在同时处理代码时对代码运行测试时)。 如果测试导致JVM关闭,则需要重新启动SBT。为了避免这种风俗,分支JVM很重要。 如果代码遵循下面列出的约束,则不需要派生JVM来运行代码,否则它必须在分叉的JVM中运行: 当用户创建的线程自行终止时,不会创建任何线程或程序结束 System.exit用于结束程序,用户创建的线程在中断时终止 不进行反序列化或反序列化代码确保使用正确的类加载器
为什么我们需要派生JVM?
当用户使用运行或控制台命令运行代码时,代码将在与SBT相同的虚拟机上运行。在某些情况下,运行代码可能会导致SBT崩溃,例如System.exit调用或未终止的线程(例如,在同时处理代码时对代码运行测试时)。
如果测试导致JVM关闭,则需要重新启动SBT。为了避免这种风俗,分支JVM很重要。
如果代码遵循下面列出的约束,则不需要派生JVM来运行代码,否则它必须在分叉的JVM中运行:
我无法找到原因:
但这是他们的构建文件和建议:
https://github.com/deanwampler/spark-scala-tutorial/blob/master/project/Build.scala
希望有人能给出更好的答案。
编辑代码:
import org.apache.spark.sql.SparkSession
object HelloWorld { def main(args: Array[String]): Unit = { val spark = SparkSession.builder().master("local").appName("BigApple").getOrCreate() import spark.implicits._ val ds = Seq(1, 2, 3).toDS() ds.map(_ + 1).foreach(x => println(x)) } }
build.sbt
name := """untitled""" version := "1.0" scalaVersion := "2.11.7" libraryDependencies += "org.scalatest" %% "scalatest" % "2.2.6" % "test" libraryDependencies += "org.apache.spark" % "spark-sql_2.11" % "2.1.1"