2017-10-12 1 views
1

스파크 스칼라 코드의 단위 테스트를 작성하는 방법을 모색 중입니다. 나는 스파크 테스트 기반을 가로 질러 내가 오류를 얻을 몇 가지 표준 예제를 실행하려고에 온스파크 테스트베이스를 사용하여 스파크 단위 테스트

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

감사합니다. 내가 그것을 밖으로 시도하고 확인하십시오. btw는 spark-testing-base를 사용하고 싶지 않은 특별한 이유가 있습니까? 스파크 유닛 테스팅에 대한 모든 문헌은 – Ravikiran

+0

입니다. 스파크 테스팅 기반은 스파크의 일부 패키지 전용 코드에서 파생됩니다. 그것은 스파크를 테스트 할 수있는 풍부한 기능을 제공합니다. 필자의 의견으로는 이러한 추가 기능으로 인해 스파크 테스트가 더욱 복잡해졌습니다. YMMV –

+0

마지막 행에서 '심볼을 닫을 수 없습니다'라는 오류 메시지가 나타납니다. 다른 것을 가져와야합니까? SparkSession을 이미 가져 왔습니다. – Ravikiran