Databricks Connectを使ってみる

[Databricks Connectのマニュアル \- Qiita](https://qiita.com/taka_yayoi/items/a9781c0a871a5a4fcf2e)で紹介された手順を実際に実施した内容となります。

Databricks ConnectはDatabricksランタイムのクライアントライブラリです。Databricks Connectを用いることで、お使いのIDE(Eclipse、IntelliJ、PyCharm、RStudio、Visual Studio Code)、ノートブックサーバー(Jupyter Notebook、Zeppelin)、他のカスタムアプリケーションからDatabricksクラスターに接続できます。

ここでは、PyCharmからDatabricksクラスターに接続する流れをご紹介します。

# PyCharmのインストール

ローカルマシンにPyCharmがインストールされていない場合には、ダウンロードしてインストールします。

https://www.jetbrains.com/pycharm/download

# Databricksクラスターの作成

Databricks Connectを使用する際には、Databricksランタイムのバージョンに注意する必要があります。

[こちら](https://qiita.com/taka_yayoi/items/a9781c0a871a5a4fcf2e#%E8%A6%81%E4%BB%B6)で説明されている通り、特定のバージョンのみがDatabricks Connectをサポートしています。また、使用するランタイムでサポートしているPythonのバージョンにも注意が必要です。ローカルマシンのIDEで使用するPythonのバージョンを一致させる必要があります。

ここでは、Python 3.8をサポートしているDatabricksランタイム9.1でクラスターを作成します。Databricksワークスペースにアクセスしてクラスターを作成しておきます。
![Screen Shot 2022-01-18 at 13.11.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/d706b541-6100-46d1-832e-39187ff6f6e2.png)

# パーソナルアクセストークンの作成

Databricks ConnectからDatabricksクラスターにアクセスする際には、パーソナルアクセストークンが必要となります。

サイドメニューの**User Settings**で**Access Tokens**を開き、**Generate New Token**をクリックします。トークン名と有効期限を入力して**Generate**をクリックします。
![Screen Shot 2022-01-18 at 13.21.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/2354def8-7214-ad27-ad44-98b55d9565e3.png)

パーソナルアクセストークンが表示されるのでコピーしておきます。
![Screen Shot 2022-01-18 at 13.23.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/50ea002b-51ec-57bf-1c23-7fdf2bd6709a.png)

:::note warn
パーソナルアクセストークンは厳重に管理してください。第三者に共有しないでください。
:::

# Databricks Connectのセットアップ

IDEを使用するローカルマシンでDatabricks Connectの設定を行います。以下の情報が必要となります。

- クラスターを作成したDatabricksのワークスペースURL
- 上で作成したDatabricksのパーソナルアクセストークン
- 作成したクラスターのID。クラスターページのURLからクラスターIDを取得できます。以下の例では、クラスターIDは`0304-201045-hoary804`となります。
![](https://camo.qiitausercontent.com/7fe0316a1ca7525e0de01a075b5162929900af1e/68747470733a2f2f646f63732e64617461627269636b732e636f6d2f5f696d616765732f636c75737465722d69642d6177732e706e67)

## Pythonバージョンの確認・設定

ここでローカルマシンにDatabricks Connectをインストールしますが、この際には後述するIDEで使用するPythonインタプリタを用いてインストールを行うようにしてください。複数のバージョンのPythonインタプリタが存在する場合には、Pyenvで切り替えるなどしてください。ここでは、クラスターと同じPython 3.8を使用するように設定します。

https://techacademy.jp/magazine/24451

```bash:Bash
pyenv install 3.8.7
pyenv global 3.8.7
```

## Databricks Connectのインストール

Terminal(Macの場合)で以下を実行します。`databricks-connect==`以降の数字は上のDatabricksランタイムと同じものを指定する必要があります。最新のものがインストールされるように末尾は`*`とします。

```bash:Bash
pip install -U "databricks-connect==9.1.*"
```

## Databricks Connectの設定

以下を実行します。

```bash:Bash
databricks-connect configure
```

- `Databricks Host`には、上記ワークスペースのURL`https://<ワークスペースのホスト名>/`を指定します。
- `Databricks Token`には、上で作成したパーソナルアクセストークンを指定します。
- `Cluster ID`には上で取得したクラスターIDを指定します。
- `Org ID`は空のままとします。
- `Port`には15001を指定します。

## 接続確認

以下を実行します。

```bash:Bash
databricks-connect test
```

以下のようなメッセージが最後に表示されれば接続は確立しています。

```
* Simple dbutils test passed
* All tests passed.
```

# PyCharmの設定

上でDatabricks Connectをインストールする際に使用したPythonインタプリタをPyCharmで使用するように設定する必要があります。

New Projectを作成する際、**Previously configured interpreter**を選択します。ドロップダウンにDatabricks Connectをインストールする際に使用したPythonインタプリタがあれば選択し、存在しない場合には、右側の`...`をクリックし、インタプリタを選択します。
![Screen Shot 2022-01-18 at 14.42.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/d311eefd-0254-64c4-cf3a-349349452b13.png)

![Screen Shot 2022-01-18 at 14.54.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/f05c72df-10b3-b0cd-b6c8-a9304ebcdfa4.png)

main.pyファイルに以下の内容を貼り付けます。シンプルな動作確認用Pythonファイルです。

```py:Python
from pyspark.sql import SparkSession
from pyspark.dbutils import DBUtils

spark = SparkSession.builder.getOrCreate()

dbutils = DBUtils(spark)
print(dbutils.fs.ls("dbfs:/"))
```

main.pyファイルを右クリックし、**Modify Run Configuration...**をクリックします。環境変数に`PYSPARK_PYTHON=python3`を追加します。
![Screen Shot 2022-01-18 at 15.03.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/ff7d20fd-8e25-321c-ec70-1de91c601b4b.png)

main.pyを**Run**します。以下のように`[FileInfo(path='dbfs:...`と表示されれば、無事にPyCharmからDatabricksクラスターにアクセスできていることになります。
![Screen Shot 2022-01-18 at 14.56.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/17e3793a-0a4e-e764-c2b0-f913157b8343.png)


### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)