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 ==========================