2016-08-22 2 views
1

scalatest_2.11 버전 2.2.1을 사용하고 있습니다. SparkContext에서 실행되는 테스트를 작성하려고합니다. 테스트가 시작될 때 SparkContext를 시작하고,이 Sc를 사용하여 모든 테스트를 수행 한 다음, 모두 완료되면 SparkContext를 중지 할 수 있습니까?스칼라 : 테스트가 끝나면 어떻게 조치 할 수 있습니까?

(I는 그 자체가 중지 가정 것을 알고 있지만, I'sd 여전히 나 자신을 좋아)

+0

체크 아웃 https://github.com/holdenk/spark-testing-base - 그을 수행하고 훨씬 더 구체적으로 https://github.com/holdenk/spark-testing-base를 살펴 /blob/master/src/main/1.3/scala/com/holdenkarau/spark/testing/SharedSparkContext.scala –

+0

다음은 간단한 'beforeAll' 예입니다. https://github.com/kevinmeredith/scalatest_beforeAll_testing –

답변

3

당신은 ScalaTest에서 BeforeAndAfterAll를 사용할 수 있습니다. SparkContext를 시작하고 중지하고 다른 테스트와 함께 사용하는 기본 특성을 정의하십시오.

trait SparkTest extends BeforeAndAfterAll { 
    self: Suite => 

    @transient var sc: SparkContext = _ 

    override def beforeAll { 
    val conf = new SparkConf(). 
     setMaster("local[*]"). 
     setAppName("test") 
    sc = new SparkContext(conf) 
    super.beforeAll() 
    } 

    override def afterAll: Unit = { 
    try { 
     sc.stop() 
    } finally { 
     super.afterAll 
    } 
    } 

} 

// Mix-in the trait with your tests like below. 
class MyTest extends FunSuite with SparkTest { 
    test("my test") { 
    // you can access "sc" here. 
    } 
} 
+0

(1) SparkTest가 Suite with BeforeAndAfterAll을 따르지 않습니다. (2) SparkContext를'afterAll'으로 어떻게 전송합니까? 기능성을 바꿀 수 있습니까? – shakedzy

+1

전체 예제를 사용하여 답변을 업데이트했습니다. – Jegan

+0

'@ transient' 추가에 대해 자세히 설명해 주시겠습니까? 그게 왜 필요한가요? 그리고'self : Suite' 부분에서, 괜찮 으면 :) – shakedzy