Scala:测试结束后,我如何执行操作?
我正在使用Scala:测试结束后,我如何执行操作?,scala,apache-spark,scalatest,Scala,Apache Spark,Scalatest,我正在使用scalatest_2.112.2.1版。我正在尝试编写在SparkContext上运行的测试。我如何在测试开始时启动SparkContext,在所有测试中使用此Sc,然后在测试完成后停止它 (我知道它会自动停止,但我还是喜欢自己做)您可以使用ScalaTest。定义启动和停止SparkContext的基本特征,并将其用于其他测试 trait SparkTest extends BeforeAndAfterAll { self: Suite => @transient
scalatest_2.11
2.2.1版。我正在尝试编写在SparkContext上运行的测试。我如何在测试开始时启动SparkContext,在所有测试中使用此Sc,然后在测试完成后停止它
(我知道它会自动停止,但我还是喜欢自己做)您可以使用ScalaTest。定义启动和停止SparkContext的基本特征,并将其用于其他测试
trait SparkTest extends BeforeAndAfterAll {
self: Suite =>
@transient var sc: SparkContext = _
override def beforeAll {
val conf = new SparkConf().
setMaster("local[*]").
setAppName("test")
sc = new SparkContext(conf)
super.beforeAll()
}
override def afterAll: Unit = {
try {
sc.stop()
} finally {
super.afterAll
}
}
}
// Mix-in the trait with your tests like below.
class MyTest extends FunSuite with SparkTest {
test("my test") {
// you can access "sc" here.
}
}
签出-这是否更重要,具体看一下这里的一个简单的
beforeAll
示例:(1)我得到的SparkTest不符合Suite的beforead and aftereal
,(2)我如何将SparkContext传输到afterAll
?是否允许我更改函数算术?请详细说明添加的@transient
?为什么这是必要的?至于self:Suite
部分,如果您不介意的话:)@transient有助于避免序列化问题。Spark序列化该类(如果在转换中引用了某个类)。在这种情况下,您将得到序列化错误,因为SparkContext不可序列化。添加transient会给出提示,使其不会序列化。如果您的案例中不需要它,您可以忽略它。Self-type充当“this”的别名,它允许通过“this”访问其他实例成员。这里有一个简单而好的解释。在使用self类型之前和之后,当我们扩展它时,我们必须遵守它。这就是为什么这里需要它。