暗黙的なインポートがスカラーテストで期待通りに機能しない理由を理解するのは難しいです。単純化失敗(火花を使用して、私はそれがまた私のカスタムクラスで失敗することができます)の例は次のとおりです。スカートでの暗黙のメソッドのインポート
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形質は作成しbeforeAll
とafterAll
で火花コンテキストを破棄し、すでに(sqlctx
が利用できるようにしますimplicitsをインポートするためにそれをローカル変数に再割り当てする必要がありますが、パズルですが、多分別の時間)。 .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
}
}
私はテストクラスのトップレベルで暗黙をインポートすることはできませんなぜ任意のアイデアは?
ありがとうございます。ですから、 'beforeAll'メソッドではなく、特性のコンストラクタで適切に初期化する必要があります。 – psarka