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._
テストスイートで。
どんな助けでもありがたいです!
インポートを行うには、エラーメッセージにあるように「安定した識別子」が必要です。これは、varではなくvalが必要であることを意味します。 sparkを変数として定義したため、scalaは正しくインポートできません。
これを解決するには、次のようにします。
val spark2 = spark
import spark2.implicits._
または、代わりに元のvarをvalに変更します。例:
lazy val spark: SparkSession = SparkSession.builder().master("local").appName("class-name-test").getOrCreate()