2017-01-11 7 views
6

मैं स्पार्क सत्र में प्रवेश करने और नष्ट करने के लिए बॉयलरप्लेट कोड से बचने के लिए स्कैलाटेस्ट फ़नसूइट परीक्षण को दोबारा करने का प्रयास करता हूं।बॉयलरप्लेट स्पार्क कोड से बचने के लिए स्कैलाटेस्ट फनसुइट को कैसे कार्यान्वित करें और आयात करें

समस्या यह है कि मुझे आयात निहित कार्यों की आवश्यकता है लेकिन दृष्टिकोण के पहले/बाद में उपयोग करने के लिए केवल चर (var फ़ील्ड) का उपयोग किया जा सकता है, और इसे आयात करने के लिए एक मूल्य (वैल फ़ील्ड) आवश्यक है।

विचार प्रत्येक परीक्षण निष्पादन के लिए एक नया साफ स्पार्क सत्र होना है।

मैं कुछ इस तरह से करने की कोशिश:

import org.apache.spark.SparkContext 
import org.apache.spark.sql.{SQLContext, SparkSession} 
import org.scalatest.{BeforeAndAfter, FunSuite} 

object SimpleWithBeforeTest extends FunSuite with BeforeAndAfter { 

    var spark: SparkSession = _ 
    var sc: SparkContext = _ 
    implicit var sqlContext: SQLContext = _ 

    before { 
    spark = SparkSession.builder 
     .master("local") 
     .appName("Spark session for testing") 
     .getOrCreate() 
    sc = spark.sparkContext 
    sqlContext = spark.sqlContext 
    } 

    after { 
    spark.sparkContext.stop() 
    } 

    test("Import implicits inside the test 1") { 
    import sqlContext.implicits._ 

    // Here other stuff 
    } 

    test("Import implicits inside the test 2") { 
    import sqlContext.implicits._ 

    // Here other stuff 
    } 

लेकिन लाइन import sqlContext.implicits._ में मैं एक त्रुटि है

प्रतीक कैसे इस समस्या को हल करने के लिए sqlContext

को हल नहीं कर सकते या टेस्ट क्लास को कैसे लागू किया जाए?

उत्तर

1

स्पार्क संदर्भ के लिए एक नया अपरिवर्तनीय चर परिभाषित करें और implicits आयात करने से पहले इसे var असाइन करें।

class MyCassTest extends FlatSpec with BeforeAndAfter { 

    var spark: SparkSession = _ 

    before { 
    val sparkConf: SparkConf = new SparkConf()  
    spark = SparkSession. 
     builder(). 
     config(sparkConf). 
     master("local[*]"). 
     getOrCreate() 
    } 

    after { 
    spark.stop() 
    } 

    "myFunction()" should "return 1.0 blab bla bla" in { 
    val sc = spark 
    import sc.implicits._ 

    // assert ... 
    } 
} 
संबंधित मुद्दे