【发布时间】:2016-08-29 15:29:49
【问题描述】:
我很难理解为什么隐式导入不能像我期望的那样工作。简化的失败示例(使用 spark,但我也可以使用自定义类使其失败)如下:
class FailingSpec extends FlatSpec with Matchers with MySparkContext {
val testSqlctx = sqlctx
import sqlctx.implicits._
"sql context implicts" should "work" in {
val failingDf = Seq(ID(1)).toDS.toDF
}
}
MySparkContext trait 在 beforeAll 和 afterAll 中创建和销毁 spark 上下文,并使 sqlctx 可用(已经必须将其重新分配给局部变量才能导入隐式是一个难题,但也许对于不同的时间)。然后.toDS 和.toDF 是从sqlctx.implicits 导入的隐式方法。在java.lang.NullPointerException 中运行测试结果。
如果我将导入移到测试块中,一切正常:
class WorkingSpec extends FlatSpec with Matchers with MySparkContext {
"sql context implicts" should "work" in {
val testSqlctx = sqlctx
import sqlctx.implicits._
val workingDf = Seq(ID(1)).toDS.toDF
}
}
任何想法为什么我不能在测试类的顶层导入隐式?
【问题讨论】: