Ich bin schwer zu verstehen, warum implizite Importe nicht so funktionieren, wie ich sie in scalatest erwarte. Das vereinfachte Fehler Beispiel (unter Verwendung von Funken, aber ich kann es mit meiner benutzerdefinierten Klasse machen scheitert auch) ist wie folgt:Importieren impliziter Methoden in scalatest
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
}
}
Das MySparkContext Merkmal schafft und zerstört Kontext Funken in beforeAll
und afterAll
und macht sqlctx
verfügbar (bereits Um es implicits zu importieren ist es ein Puzzle, aber vielleicht für eine andere Zeit). Die .toDS
und .toDF
sind dann implizite Methoden importiert aus sqlctx.implicits
. Ausführen der Testergebnisse in einem java.lang.NullPointerException
.
Wenn ich den Import in Testblock Dinge bewegen arbeiten:
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
}
}
Irgendwelche Ideen, warum kann ich nicht implicits auf der obersten Ebene der Testklasse importieren?
Danke, so offensichtlich im Nachhinein! Ich denke also, ich sollte die Dinge im Konstruktor des Merkmals richtig initialisieren und nicht in der Methode 'BeforeAll'. – psarka