はじめに
Databricks Connect v2がリリースされ、どこからでも簡単にSparkコードの実行ができるようになりました。従来のようにSQLを書く必要もありません(Python、Java、Scala、Rに対応)。IDEで利用してもいいですし、Applicationに組み込んだ実行も可能です。
SQL クエリを使用した python 開発の場合、Databricks では、Databricks Connect ではなくPython 用 Databricks SQL コネクタを使用することをお勧めします。 Python 用 Databricks SQL コネクタは、Databricks Connect よりも設定が簡単です。 また、ジョブがリモートのコンピューティングリソース上で実行されている間、Databricks Connect はローカル コンピューター上で実行されているジョブの解析および計画を行います。 これにより、特にランタイムエラーのデバッグが困難になる可能性があります。 Python 用 Databricks SQL コネクタは、リモートのコンピューティングリソースに SQL クエリを直接送信し、結果をフェッチします。
前提条件 - Requirement
- Databricks Runtime 13.0以降(通常ライブラリとMLライブラリ両方対応)
- Unity Catalogが有効なDatabricksワークスペースとそれに対応するアカウント
- Unity Catalogをサポートしているクラスター (Access Mode)
(*)現状、DBSQLには対応していないので要注意!
Setup
1. まずはvenvなどで、実行環境を準備
# Linux and macOS
python3.10 -m venv ./.venv
source .venv/bin/activate
2. Databricks Connectをinstall
pip3 install --upgrade "databricks-connect==13.0.*" # Or X.Y.* to match your cluster version.
3. Connection Profileの構成
今回は、Databricks CLIがインストールしてあるので、そちらのプロファイルを利用します。
(直接構成する場合などは、こちらをご覧ください。 )
- <profile-name> : databricks-cliで作成されたプロファイル (例:DEFAULT)
- <CLUSTER_ID> : databricks cluster-id (例:0123-090981-wxxxxxx) (cluster idの確認)
from databricks.connect import DatabricksSession
from databricks.sdk.core import Config
config = Config(profile = "<profile-name>",cluster_id="<CLUSTER_ID>")
spark = DatabricksSession.builder.sdkConfig(config).getOrCreate()
4. 実行
上記のProfileコードについで以下のコードを追加して、dbconnect_test.pyとして保存し実行してみます。
df = spark.table("samples.nyctaxi.trips").limit(10).toPandas()
print(df)
Clusterが停止している時は、上記のコード実行とともに起動しますが、タイムアウトエラーになることもあるので、起動しておいた方がお勧めです。
Plotly Dash のサンプルを動作させてみる。
Blogには、Plotly Dashと Databricks Connectを使ったサンプルコードが参照できます。
https://github.com/databricks-demos/dbconnect-plotly
こちらをセットアップして利用してみます。
- まずは手元のVSCodeで、上記のレポジトリーをクローンする
- ターミナルを開いて、venvを作成&activate
-
pip install -r requirements.txt
にて、dbconnectなどをinstall - app.pyファイル内の profile , cluster_id を編集。
- app.pyを実行し、表示されたURLにアクセス
簡単にデモ環境の完成です。
その他
IDE利用時にはDebugなどの機能も利用できます。
Databricks Extension for VSCodeでDebugがサポートされました