2017-10-12 5 views
1

spark scala codeの単体テストを書く方法を探っています。私は、スパークテストベースに出くわしたといくつかの標準的な例を実行しようとすると、私はエラーを取得spark-testing-baseを使ったスパークユニットテスト

import org.scalatest.FunSuite 
import com.holdenkarau.spark.testing.{SharedSparkContext} 

class AppTest extends FunSuite with SharedSparkContext { 
    test("test initializing spark context") { 
    val list = List(1, 2, 3, 4) 
    val rdd = sc.parallelize(list) 

    assert(rdd.count === list.length) 
    } 
} 

次のようにエラーがある:

Class 'AppTest' must either be declared abstract or implement abstract member 'withFixture(test:Any):Outcome' in 'org.scalatest.SuiteMixin' 

私は同じのためのIntelliJ IDEAを使用していますし、私のbuild.sbtは次のようになります

name := "" 

version := "1.0" 

scalaVersion := "2.11.8" 

fork in Test := true 

libraryDependencies ++= Seq("org.apache.spark" %% "spark-core" % "2.0.0", 
    "org.apache.spark" %% "spark-mllib"    % "2.0.0", 
    "org.apache.spark" %% "spark-sql"    % "2.0.0", 
    "org.scalatest" %% "scalatest" % "1.9.1" % "test", 
    "com.holdenkarau" %% "spark-testing-base" % "0.7.2" % "test" 
) 

parallelExecution in Test := false 

私は以前にユニットテストを行ったことがありません。この問題のお手伝いをお願いします。

答えて

1

私はスパークテストベースを使用しないことをお勧めします。代わりにSparkContextの組み込み機能を使用して、実行ユニットテストプロセスで開始することができます。

例:

import org.scalatest.FunSuite 

class AppTest extends FunSuite { 
    test("test initializing spark context") { 
    val myLocalInProcessSession = SparkSession 
            .builder 
            .master("local[*]") //This is the key config change to make it a local in process spark session. 
            .appName("myApp") 
            .getOrCreate() 
    val list = List(1, 2, 3, 4) 
    val rdd = myLocalInProcessSession.sparkContext.parallelize(list) 

    assert(rdd.count === list.length) 
    myLocalInProcessSession.close() 
    } 
} 

あなたはFunSuiteでツールを使ってローカルスパークテストセッションの作成を一般化することができます。

+0

ありがとうございました。それを試してチェックしてみましょう。あなたはスパークテストベースを使用したくない特別な理由はありますか?スパークユニットテストのすべての文献では、 – Ravikiran

+0

スパークテストベースはsparkのいくつかのパッケージプライベートコードから派生しています。スパークをテストする豊富な機能を提供します。私の意見では、これらの追加機能により、スパークテストはより複雑になります。 YMMV –

+0

最後の行で 'シンボルを解決できません'というエラーが表示されます。私は何か他のものを輸入する必要がありますか?私はすでにSparkSessionをインポートしています。 – Ravikiran

関連する問題