apache-spark
단위 테스트
수색…
단어 수 단위 테스트 (Scala + JUnit)
예를 들어 countWords
메소드가있는 WordCountService
가 있습니다.
class WordCountService {
def countWords(url: String): Map[String, Int] = {
val sparkConf = new SparkConf().setMaster("spark://somehost:7077").setAppName("WordCount"))
val sc = new SparkContext(sparkConf)
val textFile = sc.textFile(url)
textFile.flatMap(line => line.split(" "))
.map(word => (word, 1))
.reduceByKey(_ + _).collect().toMap
}
}
이 서비스는 매우 못생긴 것으로 보이며 단위 테스트에는 적합하지 않습니다. 이 서비스에 SparkContext를 주입해야합니다. 좋아하는 DI 프레임 워크로 접근 할 수 있지만 간단히하기 위해 생성자를 사용하여 구현됩니다.
class WordCountService(val sc: SparkContext) {
def countWords(url: String): Map[String, Int] = {
val textFile = sc.textFile(url)
textFile.flatMap(line => line.split(" "))
.map(word => (word, 1))
.reduceByKey(_ + _).collect().toMap
}
}
이제 간단한 JUnit 테스트를 만들고 WordCountService에 테스트 가능한 sparkContext를 삽입 할 수 있습니다.
class WordCountServiceTest {
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("WordCountTest")
val testContext = new SparkContext(sparkConf)
val wordCountService = new WordCountService(testContext)
@Test
def countWordsTest() {
val testFilePath = "file://my-test-file.txt"
val counts = wordCountService.countWords(testFilePath)
Assert.assertEquals(counts("dog"), 121)
Assert.assertEquals(counts("cat"), 191)
}
}
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow