4

Ich schreibe Testfälle für Spark mit ScalaTest.Spark Implicits in ScalaTest nicht importieren

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() 
    } 
} 

Wenn ich versuche, die Testsuite zu kompilieren es mir folgende Fehler gibt:

stable identifier required, but ClassNameSpec.this.spark.implicits found. 
[error]  import spark.implicits._ 
[error]    ^
[error] one error found 
[error] (test:compileIncremental) Compilation failed 

Ich bin zu verstehen, nicht in der Lage, warum kann ich nicht import spark.implicits._ in einer Testsuite.

Jede Hilfe wird geschätzt!

+2

Sein, weil Sie 'SparkSession' als' var' definiert haben . Definiere es als "val" oder "transforming" in ein "val" sollte funktionieren. –

Antwort

13

Um einen Import durchzuführen, benötigen Sie eine "stabile Kennung", wie die Fehlermeldung sagt. Dies bedeutet, dass Sie ein val haben müssen, nicht eine var. Da Sie Spark als Var definiert haben, kann Scala nicht korrekt importiert werden.

Um dies zu lösen, die Sie einfach so etwas wie tun:

val spark2 = spark 
import spark2.implicits._ 

oder stattdessen ändern, um die ursprüngliche var val, zB:

lazy val spark: SparkSession = SparkSession.builder().master("local").appName("class-name-test").getOrCreate() 
+0

Danke !!! Es hat für mich funktioniert! Aber es ist seltsam zu wissen, dass 'SparkSession' sich seltsam verhält, wenn es als' var' definiert ist. Kennen Sie den Grund dafür? – himanshuIIITian

+0

Es hat nichts mit SparkSession zu tun. SparkSession verhält sich vollkommen normal. Es ist ein Problem beim Importieren. Import erfordert eine stabile Kennung. Ein stabiler Bezeichner kann ein Wert sein, aber kein var oder def –

+0

Oh ... Ok! Wusste das nicht :) – himanshuIIITian

Verwandte Themen