Databricks Connect for Scala のテスト

注:

この記事では、Databricks Runtime 13.3 LTS 以降の Databricks Connect について説明します。

この記事では、Databricks Runtime 13.3 LTS 以降で ScalaTest for Databricks Connect を使用してテストを実行する方法について説明します。 Databricks Connectの詳細については、 Databricks Connect for Scalaを参照してください。

この情報は、Databricks Connect for Scala がすでにインストールされていることを前提としています。 「Databricks Connect for Scala のインストール」を参照してください。

リモート Databricks ワークスペース内のクラスターへの接続を必要としないローカル コードでScalaTestを実行できます。 たとえば、ScalaTest を使用して、ローカルメモリ内の DataFrame オブジェクトを受け入れて返す関数をテストできます。 ScalaTest を使い始めてローカルで実行するには、ScalaTest ドキュメントの「はじめに」を参照してください。

たとえば、SparkSession インスタンスを返す getSpark 関数と、samples カタログのnyctaxiスキーマ内のtripsテーブルを表すDataFrameを返す getTaxis 関数を含む次のファイル src/main/scala/NYCTaxiFunctions.scalaがあるとします。

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

そして、これらのgetSpark関数とgetTaxis関数を呼び出す次のファイルsrc/main/scala/Main.scalaがあるとします。

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.scalagetSpark 関数が SparkSession インスタンスを返すかどうか、および getTaxis 関数が少なくとも 1 行のデータを含む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 アプリケーションのテスト」を参照してください。