Databricks Connect for Python のテスト
この記事では、Databricks Runtime13.3LTS以降のDatabricks Connectについて説明します。
この記事では、Databricks Runtime 13.3 LTS 以降で Databricks Connect の pytest
を使用してテストを実行する方法について説明します。Databricks Connect for Python をインストールするには、「 Databricks Connect for Python のインストール」を参照してください。
pytest は、リモート Databricks ワークスペース内のクラスターへの接続を必要としないローカル コードで実行できます。たとえば、 pytest
を使用して、ローカルメモリ内の PySpark DataFrame
オブジェクトを受け入れて返す関数をテストできます。 pytest
の使用を開始し、ローカルで実行するには、pytest
のドキュメントのはじめにを参照してください。
Databricks Connect と PySpark は相互に排他的です。詳細については、競合する PySpark インストールを参照してください。
ターミナルから Databricks Connect を実行する場合、pytest
はデフォルト構成プロファイルでのみ機能します。 プロファイルには、使用するコンピュート (クラスタリングまたはサーバレス コンピュート) Databricks を含める必要があります。 コンピュートの設定に関する情報については、Databricks Connectにおけるコンピュートの設定を参照してください 。
たとえば、SparkSession
インスタンスを返す the get_spark
関数と、samples
カタログの nyctaxi
スキーマの trips
テーブルを表すDataFrame
を返す get_nyctaxi_trips
関数を含む nyctaxi_functions.py
という名前の次のファイルがあるとします。
nyctaxi_functions.py
:
from databricks.connect import DatabricksSession
from pyspark.sql import DataFrame, SparkSession
def get_spark() -> SparkSession:
spark = DatabricksSession.builder.getOrCreate()
return spark
def get_nyctaxi_trips() -> DataFrame:
spark = get_spark()
df = spark.read.table("samples.nyctaxi.trips")
return df
そして、これらのget_spark
関数とget_nyctaxi_trips
関数を呼び出すmain.py
という名前の次のファイルがあるとします。
main.py
:
from nyctaxi_functions import *
df = get_nyctaxi_trips()
df.show(5)
次の test_nyctaxi_functions.py
という名前のファイルは、 get_spark
関数が SparkSession
インスタンスを返すかどうか、および get_nyctaxi_trips
関数が少なくとも 1 行のデータを含む DataFrame
を返すかどうかをテストします。
test_nyctaxi_functions.py
:
import pyspark.sql.connect.session
from nyctaxi_functions import *
def test_get_spark():
spark = get_spark()
assert isinstance(spark, pyspark.sql.connect.session.SparkSession)
def test_get_nyctaxi_trips():
df = get_nyctaxi_trips()
assert df.count() > 0
これらのテストを実行するには、コード プロジェクトのルートから pytest
コマンドを実行すると、次のようなテスト結果が生成されます。
$ pytest
=================== test session starts ====================
platform darwin -- Python 3.11.7, pytest-8.1.1, pluggy-1.4.0
rootdir: <project-rootdir>
collected 2 items
test_nyctaxi_functions.py .. [100%]
======================== 2 passed ==========================