如何在 Databricks 中运行 Spark-Scala 单元测试笔记本?

时间:2021-06-14 13:25:35

标签: scala apache-spark databricks azure-databricks scalatest

我正在尝试使用 scalatest.funsuite 为我的 Spark-Scala 笔记本编写单元测试代码,但带有 test() 的笔记本没有在数据块中执行。你能告诉我如何运行它吗?

这是相同的示例测试代码。

import org.apache.spark.sql.{Row, SparkSession}
import org.scalatest.funsuite.AnyFunSuite
import org.scalatest.Assertions._
import org.apache.spark.eventhubs._
import com.fasterxml.uuid.Generators
import org.apache.spark.sql.functions._
import org.apache.spark.sql.{DataFrame, Row, SparkSession, Column}

class ImsLoyaltyTest extends AnyFunSuite {
  test ("Date Format Checker") {
    val sampleIpData = Seq(
      Row("india","hello","05-03-2021","14","50"),
      Row("india","hello","15-06-2021","14","50"),
      Row("india","hello","05/06/2021","6100","50"),
      Row("india","hello","05-31-2021","14","50")
    )
    
    val sampleIpSchema = new StructType()
      .add("a", StringType)
      .add("b", StringType)
      .add("c", StringType)
      .add("d", StringType)
      .add("e", StringType)
    
    val sampleIpDF = spark.createDataFrame(spark.sparkContext.parallelize(sampleIpData), sampleIpSchema)
    
    assert (sampleIpDF.collectAsList() == sampleIpDF.collectAsList())
    
  }
}

1 个答案:

答案 0 :(得分:1)

您需要为该测试套件显式创建对象并执行它。 在 IDE 中,您依赖于特定的运行器,但它在笔记本环境中不起作用。

您可以使用创建对象 (docs) 的 .execute 函数:

(new ImsLoyaltyTest).execute()

但最好使用 ScalaTest shell (docs) 的 .run 方法 - 您可以控制颜色输出、运行多个测试等:

import org.scalatest._

nocolor.durations.stats.run(new ImsLoyaltyTest)