Databricks Connect v2 利用してみた（どこからでもSpark実行）


# はじめに

[Databricks Connect v2](https://www.databricks.com/jp/blog/2023/04/18/use-databricks-anywhere-databricks-connect-v2.html)がリリースされ、**どこからでも簡単にSparkコードの実行**ができるようになりました。従来のようにSQLを書く必要もありません(Python、Java、Scala、Rに対応)。IDEで利用してもいいですし、Applicationに組み込んだ実行も可能です。

:::note warn
SQL クエリを使用した python 開発の場合、Databricks では、Databricks Connect ではなく[Python 用 Databricks SQL コネクタ](https://learn.microsoft.com/ja-JP/azure/databricks/dev-tools/python-sql-connector)を使用することをお勧めします。 Python 用 Databricks SQL コネクタは、Databricks Connect よりも設定が簡単です。 また、ジョブがリモートのコンピューティングリソース上で実行されている間、Databricks Connect はローカル コンピューター上で実行されているジョブの解析および計画を行います。 これにより、特にランタイムエラーのデバッグが困難になる可能性があります。 Python 用 Databricks SQL コネクタは、リモートのコンピューティングリソースに SQL クエリを直接送信し、結果をフェッチします。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/b9f2e2bb-bfaf-1392-1f59-6ca6a9df3b57.png)

:::note
Databricks Connectのドキュメントはこちらをご覧ください。
[AWS](https://docs.databricks.com/dev-tools/databricks-connect.html?_gl=1*y6oq8h*_gcl_aw*R0NMLjE2ODExMDIyNDYuQ2owS0NRand4TW1oQmhESkFSSXNBTkZHT1N2UGJDRGZNTU1YVnlTOVlwbUQySms4cFBMdnZBc3N0UWxVNFpqa25fR2lRcVlucTI1b2lpOGFBdUtqRUFMd193Y0I.&_ga=2.29817724.2132665378.1679748355-7b12c29c-197f-4aad-8264-f2a17863db3a&_gac=1.221058666.1681102246.Cj0KCQjwxMmhBhDJARIsANFGOSvPbCDfMMMXVyS9YpmD2Jk8pPLvvAsstQlU4Zjkn_GiQqYnq25oii8aAuKjEALw_wcB) | [Azure](https://learn.microsoft.com/ja-JP/azure/databricks/dev-tools/databricks-connect)
:::

# 前提条件 - [Requirement](https://docs.databricks.com/dev-tools/databricks-connect.html?_gl=1*sv0vla*_gcl_aw*R0NMLjE2ODExMDIyNDYuQ2owS0NRand4TW1oQmhESkFSSXNBTkZHT1N2UGJDRGZNTU1YVnlTOVlwbUQySms4cFBMdnZBc3N0UWxVNFpqa25fR2lRcVlucTI1b2lpOGFBdUtqRUFMd193Y0I.&_ga=2.231004892.2132665378.1679748355-7b12c29c-197f-4aad-8264-f2a17863db3a&_gac=1.116438516.1681102246.Cj0KCQjwxMmhBhDJARIsANFGOSvPbCDfMMMXVyS9YpmD2Jk8pPLvvAsstQlU4Zjkn_GiQqYnq25oii8aAuKjEALw_wcB#requirements)

- Databricks Runtime 13.0以降（通常ライブラリとMLライブラリ両方対応）
- Unity Catalogが有効なDatabricksワークスペースとそれに対応するアカウント
- Unity Catalogをサポートしているクラスター ([Access Mode](https://docs.databricks.com/clusters/configure.html#access-mode))

(*)現状、DBSQLには対応していないので要注意!


# Setup

### 1. まずはvenvなどで、実行環境を準備
```sh
# Linux and macOS
python3.10 -m venv ./.venv
source .venv/bin/activate
```

### 2\. Databricks Connectをinstall
```sh
pip3 install --upgrade "databricks-connect==13.0.*"  # Or X.Y.* to match your cluster version.
```

### 3\. Connection Profileの構成

今回は、Databricks CLIがインストールしてあるので、そちらのプロファイルを利用します。
(直接構成する場合などは、[こちら](https://docs.databricks.com/dev-tools/databricks-connect.html?_gl=1*sv0vla*_gcl_aw*R0NMLjE2ODExMDIyNDYuQ2owS0NRand4TW1oQmhESkFSSXNBTkZHT1N2UGJDRGZNTU1YVnlTOVlwbUQySms4cFBMdnZBc3N0UWxVNFpqa25fR2lRcVlucTI1b2lpOGFBdUtqRUFMd193Y0I.&_ga=2.231004892.2132665378.1679748355-7b12c29c-197f-4aad-8264-f2a17863db3a&_gac=1.116438516.1681102246.Cj0KCQjwxMmhBhDJARIsANFGOSvPbCDfMMMXVyS9YpmD2Jk8pPLvvAsstQlU4Zjkn_GiQqYnq25oii8aAuKjEALw_wcB#step-2-configure-connection-properties)をご覧ください。 )

- \<profile-name> : databricks-cliで作成されたプロファイル (例：DEFAULT）
- \<CLUSTER_ID> : databricks cluster-id (例:0123-090981-wxxxxxx) ([cluster idの確認](https://qiita.com/taka_yayoi/items/7127cabac70dd994fcba))

```python
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として保存し実行してみます。
```python
df = spark.table("samples.nyctaxi.trips").limit(10).toPandas()
print(df)
```

Clusterが停止している時は、上記のコード実行とともに起動しますが、タイムアウトエラーになることもあるので、起動しておいた方がお勧めです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/756b6614-9f05-6db0-2714-fb9ca862591f.png)


# Plotly Dash のサンプルを動作させてみる。

[Blog](https://www.databricks.com/jp/blog/2023/04/18/use-databricks-anywhere-databricks-connect-v2.html)には、Plotly Dashと Databricks Connectを使ったサンプルコードが参照できます。
https://github.com/databricks-demos/dbconnect-plotly

こちらをセットアップして利用してみます。

1. まずは手元のVSCodeで、上記のレポジトリーをクローンする
1. ターミナルを開いて、venvを作成&activate
1. `pip install -r requirements.txt` にて、dbconnectなどをinstall
1. app.pyファイル内の profile , cluster_id を編集。
1. app.pyを実行し、表示されたURLにアクセス

簡単にデモ環境の完成です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/4d45076a-5434-bf3f-e612-ae769b208c00.png)


# その他

IDE利用時にはDebugなどの機能も利用できます。
[Databricks Extension for VSCodeでDebugがサポートされました](https://qiita.com/maroon-db/items/286e269f64067137468f)