如何在 ScalaTest 测试中正确使用 Spark?

How to correctly use Spark in ScalaTest tests?

我有多个 ScalaTest 类,它们使用 BeforeAndAfterAll 构造一个 SparkContext 并在之后像这样停止它:

class MyTest extends FlatSpec with Matchers with BeforeAndAfterAll {

  private var sc: SparkContext = null

  override protected def beforeAll(): Unit = {
    sc = ... // Create SparkContext
  }

  override protected def afterAll(): Unit = {
    sc.stop()
  }

  // my tests follow
}

这些测试 运行 从 IntelliJ IDEA 启动时很好,但是当 运行 宁 sbt test 时,我得到 WARN SparkContext: Another SparkContext is being constructed (or threw an exception in its constructor). This may indicate an error, since only one SparkContext may be running in this JVM (see SPARK-2243).,之后,一堆其他异常我想这与这个问题有关。

如何正确使用Spark?我是否必须为整个测试套件创建一个全局 SparkContext,如果是,我该怎么做?

好像只见树木不见森林,我忘记了 build.sbt 中的以下行:

parallelExecution in test := false

通过这一行,测试运行。