gpt4 book ai didi

apache-spark - SparkSession 在单元测试之间没有正确关闭

转载 作者:行者123 更新时间:2023-11-28 20:36:06 25 4
gpt4 key购买 nike

我有一些单元测试需要有自己的 sparkSession。我扩展了 SQLTestUtils,并覆盖了在许多其他 Spark 单元测试中使用的 beforeAll 和 afterAll 函数(来自源代码)。我有一些看起来像这样的测试套件:

class MyTestSuite extends QueryTest with SQLTestUtils {

protected var spark: SparkSession = null

override def beforeAll(): Unit = {
super.beforeAll()
spark = // initialize sparkSession...
}

override def afterAll(): Unit = {
try {
spark.stop()
spark = null
} finally {
super.afterAll()
}
}

// ... my tests ...

}

如果我运行其中一个,没问题,但如果我运行两个或更多,我会收到此错误:

Caused by: ERROR XSDB6: Another instance of Derby may have already booted the database /home/jenkins/workspace/Query/apache-spark/sql/hive-thriftserver-cat-server/metastore_db.

但我认为 afterAll() 应该正确关闭 spark 以便我可以创建一个新的。这不对吗?我该如何实现?

最佳答案

实现此目的的一种方法是禁用 Spark 应用程序项目的并行测试执行,以确保当时只有一个 Spark Session 对象实例处于事件状态。在 sbt 语法中它会像这样:

  project.in(file("your_spark_app"))
.settings(parallelExecution in Test := false)

缺点是这是针对每个项目的设置,它还会影响将从并行化中受益的测试。解决方法是为 Spark 测试创建一个单独的项目。

关于apache-spark - SparkSession 在单元测试之间没有正确关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53713980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com