测试适用于 Scala 的 Databricks Connect

备注

本文介绍适用于 Databricks Runtime 13.3 LTS 及更高版本的 Databricks Connect。

本文介绍了如何使用 ScalaTest 在 Databricks Connect for Databricks Runtime 13.3 LTS 及更高版本运行测试。 有关 Databricks Connect 的详细信息,请参阅 适用于 Scala 的 Databricks Connect

此信息假定你已安装适用于 Scala 的 Databricks Connect。 请参阅安装适用于 Scala 的 Databricks Connect

可以针对本地代码运行 ScalaTest,而无需连接到远程 Azure Databricks 工作区中的群集。 例如,可以使用 ScalaTest 来测试接受 DataFrame 对象并将其返回到本地内存的函数。 若要开始使用并在本地运行 ScalaTest,请参阅 ScalaTest 文档中的入门

例如,假定一个 src/main/scala/NYCTaxiFunctions.scala 文件,该文件包含一个返回 SparkSession 实例的 getSpark 函数和一个 getTaxis 函数,该函数返回一个表示 samples 目录 nyctaxi 架构中 trips 表的 DataFrame

NYCTaxiFunctions.scala

package org.example.application

import com.databricks.connect.DatabricksSession
import org.apache.spark.sql.{DataFrame, SparkSession}

class NYCTaxiFunctions {
  def getSpark: SparkSession = {
    DatabricksSession.builder().getOrCreate()
  }

  def getTaxis: DataFrame = {
    val spark = getSpark
    spark.read.table("samples.nyctaxi.trips")
  }
}

另外,假设以下 src/main/scala/Main.scala 文件调用 getSparkgetTaxis 函数:

Main.scala

package org.example.application

object Main {
  def main(args: Array[String]): Unit = {
    val nycTaxiFunctions = new NYCTaxiFunctions()
    val df = nycTaxiFunctions.getTaxis

    df.show(5)
  }
}

以下 src/test/scala/NYCTaxiFunctionsTest.scala 文件会测试 getSpark 函数是否返回 SparkSession 实例,以及 getTaxis 函数是否返回至少包含一行数据的 DataFrame

NYCTaxiFunctionsTest.scala

package org.example.application

import org.apache.spark.sql.SparkSession
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers

class SparkSessionTypeTest extends AnyFlatSpec with Matchers {
  "The session" should "be of type SparkSession" in {
    val nycTaxiFunctions = new NYCTaxiFunctions()
    val spark = nycTaxiFunctions.getSpark
    spark shouldBe a [SparkSession]
  }
}

class GetTaxisRowCountTest extends AnyFlatSpec with Matchers {
  "The DataFrame" should "have at least one row" in {
    val nycTaxiFunctions = new NYCTaxiFunctions()
    val df = nycTaxiFunctions.getTaxis
    df.count() should be > (0L)
  }
}

若要运行这些测试,请参阅 ScalaTest 快速入门或 IDE 的文档。 例如,对于 IntelliJ IDEA,请参阅 IntelliJ IDEA 文档中的“测试 Scala 应用程序”。