无法在 ScalaTest 中导入 Spark Implicits
Not able to import Spark Implicits in ScalaTest
我正在使用 ScalaTest 为 Spark 编写测试用例。
import org.apache.spark.sql.SparkSession
import org.scalatest.{BeforeAndAfterAll, FlatSpec}
class ClassNameSpec extends FlatSpec with BeforeAndAfterAll {
var spark: SparkSession = _
var className: ClassName = _
override def beforeAll(): Unit = {
spark = SparkSession.builder().master("local").appName("class-name-test").getOrCreate()
className = new ClassName(spark)
}
it should "return data" in {
import spark.implicits._
val result = className.getData(input)
assert(result.count() == 3)
}
override def afterAll(): Unit = {
spark.stop()
}
}
当我尝试编译测试套件时出现以下错误:
stable identifier required, but ClassNameSpec.this.spark.implicits found.
[error] import spark.implicits._
[error] ^
[error] one error found
[error] (test:compileIncremental) Compilation failed
我无法理解为什么我不能在测试套件中 import spark.implicits._
。
感谢任何帮助!
如错误消息所述,您需要 "stable identifier" 才能进行导入。这意味着您需要有一个 val,而不是 var。
由于您将 spark 定义为 var,scala 无法正确导入。
要解决这个问题,您可以简单地执行以下操作:
val spark2 = spark
import spark2.implicits._
或者将原来的 var 改为 val,例如:
lazy val spark: SparkSession = SparkSession.builder().master("local").appName("class-name-test").getOrCreate()
我正在使用 ScalaTest 为 Spark 编写测试用例。
import org.apache.spark.sql.SparkSession
import org.scalatest.{BeforeAndAfterAll, FlatSpec}
class ClassNameSpec extends FlatSpec with BeforeAndAfterAll {
var spark: SparkSession = _
var className: ClassName = _
override def beforeAll(): Unit = {
spark = SparkSession.builder().master("local").appName("class-name-test").getOrCreate()
className = new ClassName(spark)
}
it should "return data" in {
import spark.implicits._
val result = className.getData(input)
assert(result.count() == 3)
}
override def afterAll(): Unit = {
spark.stop()
}
}
当我尝试编译测试套件时出现以下错误:
stable identifier required, but ClassNameSpec.this.spark.implicits found.
[error] import spark.implicits._
[error] ^
[error] one error found
[error] (test:compileIncremental) Compilation failed
我无法理解为什么我不能在测试套件中 import spark.implicits._
。
感谢任何帮助!
如错误消息所述,您需要 "stable identifier" 才能进行导入。这意味着您需要有一个 val,而不是 var。 由于您将 spark 定义为 var,scala 无法正确导入。
要解决这个问题,您可以简单地执行以下操作:
val spark2 = spark
import spark2.implicits._
或者将原来的 var 改为 val,例如:
lazy val spark: SparkSession = SparkSession.builder().master("local").appName("class-name-test").getOrCreate()