2017-10-12 1 views
1

J'explore sur la façon d'écrire des tests unitaires pour mon code scala étincelle. Je suis tombé sur-base d'essai à l'étincelle et à essayer d'exécuter quelques exemples standards que je reçois une erreurunité d'allumage test à l'aide d'essais à base d'allumage

import org.scalatest.FunSuite 
import com.holdenkarau.spark.testing.{SharedSparkContext} 

class AppTest extends FunSuite with SharedSparkContext { 
    test("test initializing spark context") { 
    val list = List(1, 2, 3, 4) 
    val rdd = sc.parallelize(list) 

    assert(rdd.count === list.length) 
    } 
} 

L'erreur est la suivante:

Class 'AppTest' must either be declared abstract or implement abstract member 'withFixture(test:Any):Outcome' in 'org.scalatest.SuiteMixin' 

J'utilise IntelliJ IDEA pour le même et mon build.sbt ressemble à ceci:

name := "" 

version := "1.0" 

scalaVersion := "2.11.8" 

fork in Test := true 

libraryDependencies ++= Seq("org.apache.spark" %% "spark-core" % "2.0.0", 
    "org.apache.spark" %% "spark-mllib"    % "2.0.0", 
    "org.apache.spark" %% "spark-sql"    % "2.0.0", 
    "org.scalatest" %% "scalatest" % "1.9.1" % "test", 
    "com.holdenkarau" %% "spark-testing-base" % "0.7.2" % "test" 
) 

parallelExecution in Test := false 

Je n'ai jamais fait de tests unitaires auparavant. Je vous serais reconnaissant toute aide à ce problème

Répondre

1

Je suggère de ne pas utiliser-base d'essai à l'étincelle. Au lieu de cela, vous pouvez utiliser la fonctionnalité intégrée de SparkContext pour démarrer dans le processus de test de l'unité en cours d'exécution.

Exemple:

import org.scalatest.FunSuite 

class AppTest extends FunSuite { 
    test("test initializing spark context") { 
    val myLocalInProcessSession = SparkSession 
            .builder 
            .master("local[*]") //This is the key config change to make it a local in process spark session. 
            .appName("myApp") 
            .getOrCreate() 
    val list = List(1, 2, 3, 4) 
    val rdd = myLocalInProcessSession.sparkContext.parallelize(list) 

    assert(rdd.count === list.length) 
    myLocalInProcessSession.close() 
    } 
} 

Vous pouvez généraliser la création de la session d'essai d'allumage local avec les outils FunSuite.

+0

Merci. Laissez-moi essayer cela et vérifier. btw existe-t-il une raison spécifique pour laquelle vous ne voudriez pas utiliser spark-testing-base? Toute la littérature pour les points de tests unitaires d'allumage à cette étincelle-test base – Ravikiran

+0

est dérivé du code privé paquet d'étincelle. Il fournit un moyen riche en fonctionnalités pour tester l'étincelle. À mon avis, ces fonctionnalités supplémentaires rendent les tests d'étincelles plus complexes. YMMV –

+0

je reçois une erreur disant « ne peut pas résoudre le symbole fermer » dans la dernière ligne. Ai-je besoin d'importer autre chose? J'ai déjà importé SparkSession – Ravikiran