spark unit testing using spark-testing-base

General Tech QA/Testing 2 years ago

0 2 0 0 0 tuteeHUB earn credit +10 pts

5 Star Rating 1 Rating

Posted on 16 Aug 2022, this text provides information on QA/Testing related to General Tech. Please note that while accuracy is prioritized, the data presented might not be entirely correct or up-to-date. This information is offered for general knowledge and informational purposes only, and should not be considered as a substitute for professional advice.

Take Quiz To Earn Credits!

Turn Your Knowledge into Earnings.

tuteehub_quiz

Answers (2)

Post Answer
profilepic.png
manpreet Tuteehub forum best answer Best Answer 2 years ago

 

I am exploring on how to write unit tests for my spark scala code. I came across spark-testing-base and upon trying to run a few standard examples i get an error

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)
  }
}

The error is as follows:

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

I am using IntelliJ IDEA for the same and my build.sbt looks as follows

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

I have never done unit testing before. I would appreciate any help with this issue

profilepic.png
manpreet 2 years ago

 

I suggest not using spark-testing-base. Instead you can use the built in capability of SparkContext to be started in the running unit test process.

Example:

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()
  }
}

You can generalize the creation of the local spark testing session with the tools in FunSuite.


0 views   0 shares

No matter what stage you're at in your education or career, TuteeHub will help you reach the next level that you're aiming for. Simply,Choose a subject/topic and get started in self-paced practice sessions to improve your knowledge and scores.