스파크 테스트에 대한 이 기사 에서 몇 가지 샘플 코드가 있습니다.
class SparkExampleSpec extends FlatSpec with BeforeAndAfter {
private val master = "local[2]"
private val appName = "example-spark"
private var sc: SparkContext = _
before {
val conf = new SparkConf()
.setMaster(master)
.setAppName(appName)
sc = new SparkContext(conf)
}
after {
if (sc != null) {
sc.stop()
}
}
(...)
작동하지만 nullable varaible이 sc
있습니다. 여기서 합리적이지만 여전히 피하고 싶습니다.
나는 사용하려고했다 :
private var sc: Option[SparkContext] = None
before {
sc = Some(new SparkContext(conf))
}
after {
sc.foreach(_.stop())
}
(...)
그런데 문제는 평범한 것만 큼 편리하지 않은 테스트에서와 sc
같이 사용해야 Option[SparkContext]
한다는 것입니다.SparkContext
테스트를 계속할 수있는 방법이 있지만 사용할 수 val sc: SparkContext
있습니까?
(specs2에서 가능하다는 것을 알고 있지만 scalatest에서 수행하는 방법을 모르겠으며 지금 scalatest를 사용해야합니다)
을 사용하여 삭제 before
하고 lazy val
대신 a 를 사용할 수 있으므로 첫 번째 테스트에서 컨텍스트를 호출 할 때 컨텍스트가 초기화됩니다.
class SparkExampleSpec extends FlatSpec with BeforeAndAfter {
private val master = "local[2]"
private val appName = "example-spark"
private lazy val conf = new SparkConf()
.setMaster(master)
.setAppName(appName)
private lazy val sc = new SparkContext(conf)
after {
sc.stop()
}
최신 정보:
그래서 이전에 비슷한 것을 겪었고 우리는 아래와 같은 특성 패턴으로 끝났습니다.
trait SparkAddOn {
val conf:SparkConf
def withSpark(f: SparkContext => Unit) ={
val sc: SparkContext = new SparkContext(conf)
try{
f(sc)
} finally {
sc.stop()
}
}
}
따라서 테스트에서 'withSpark'를 사용합니다.
class SparkExampleSpec extends FlatSpec with SparkAddOn {
private val master = "local[2]"
private val appName = "example-spark"
val conf = new SparkConf()
.setMaster(master)
.setAppName(appName)
"test" should "do something" in withSpark { sc =>
}
}
그리고 저는 Scalatest보다 Specs2를 훨씬 선호한다고 결론을 내릴 것입니다. 디자인은 크게 다르며 더 좋게는 전환 할 수 없습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다