खोज…


शब्द गणना इकाई परीक्षण (स्काला + यूनेट)

उदाहरण के लिए हमारे पास WordCountService साथ countWords विधि है:

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 में परीक्षण योग्य स्पार्क-कॉन्टेक्ट इंजेक्ट कर सकते हैं:

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