以下scala代码工作正常,测试运行:
import org.scalatest._
import com.holdenkarau.spark.testing._
class DummyTest extends FunSuite with SharedSparkContext {
test("shared context only works inside test functions.") {
val myRDD = sc.parallelize(List(1,2,3,4))
}
}
但是,以下scala代码导致sc.parallelize行上的java.lang.NullPointerException:
import org.scalatest._
import com.holdenkarau.spark.testing._
class DummyTest extends FunSuite with SharedSparkContext {
val myRDD = sc.parallelize(List(1,2,3,4))
test("shared context only works inside test functions.") {
assert(true)
}
}
在测试函数之外使用SparkContext时,导致NullPointerException的原因是什么?
答案 0 :(得分:5)
SparkContext在SharedSparkContext中声明,但未作为该特征初始化的一部分进行初始化。而是在特征的beforeAll()
方法中初始化,该方法在套件完全实例化后由测试框架调用。来源在这里:https://github.com/holdenk/spark-testing-base/blob/master/src/main/pre-2.0/scala/com/holdenkarau/spark/testing/SharedSparkContext.scala。如果您在初始化课程时使用它,则尚未调用beforeAll()
,因此它仍然为空。
总而言之,订单是:
因此,您可以在步骤4中使用sc
,但不能在步骤2中使用。