Databricks extension for Visual Studio Code v2 の環境構築方法


## 概要

Databricks extension for Visual Studio Code v2 の環境構築方法を紹介します。Databricks extension for Visual Studio Code には、新バージョンであるバージョン 2 系統がリリースされました。明示的に v2 とされていませんが、バージョン 1 系統との差異があるため、ここでは v2 として扱います。

バージョン 1 系統を継続的に利用したい場合には、Visual Studio Code 上で過去のバージョンをインストールすることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/b3715cec-46e1-2c72-c8d9-c91acd11e198.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/e058060e-93a7-7c25-478c-7dc3f01eb24e.png)


## 事前準備

### ソフトウェアのインストール

下記のソフトウェアをインストールします。

- Visual Studio Code (VS Code)
- WSL (Ubuntu-22.04 のインストール)

## ローカル環境の構築

### WSL distro の複製

```powershell
# Specify the source and target distro names
$src_wsl_distro_name = "Ubuntu-22.04"
$tgt_wsl_distro_name = "databricks-extension"
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/f30d3e99-98ac-b5c2-acad-94e1d8918406.png)

```powershell
# Export wsl
$wsl_file_name = $src_wsl_distro_name + ".tar"
wsl --export $src_wsl_distro_name $wsl_file_name
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/fe6ade5f-5bd2-0729-c1b5-ba7e45a17633.png)

```powershell
# Import wsl
wsl --import $tgt_wsl_distro_name $tgt_wsl_distro_name $wsl_file_name
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/7dd66335-a5d7-12d7-0a06-b51b9005b986.png)

```powershell
# Check wsl dstro list
wsl -l
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/bf7602f6-3e7d-cefe-f446-65c20a92ba5a.png)

```powershell
# Delete distro file
Remove-Item $wsl_file_name
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/a12841d9-6743-d1f9-5af3-cc35a1e0e2c3.png)

### WSL distro におけるデフォルトユーザの設定

```powershell
# login to wsl distro
wsl -d $tgt_wsl_distro_name -u root
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/2311bc44-a410-f158-15a1-7e5b7a05a621.png)

default_user_name はインストール時のユーザ名を指定します。

```bash
# Set default user name
default_user_name=manabian
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/38a2b8b4-27bf-5c07-704d-56eb3f290e19.png)

```bash
cat << EOF > /etc/wsl.conf
[user]
default=$default_user_name 
EOF

# chekc wsl.conf
cat /etc/wsl.conf
```

```bash
# logout
exit
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/3bd1a9fa-cfe4-54f7-c7fe-8b3678dea2f4.png)


```powershell
# reboot and re-login
wsl -t $tgt_wsl_distro_name
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/0ddf03b7-af55-5a1c-6900-426a4e81b3be.png)


### Miniconda のインストールと設定

```powershell
# re-login
wsl -d $tgt_wsl_distro_name
```


```bash
# download miniconda
cd
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
```

```bash
# install miniconda
bash Miniconda3-latest-Linux-x86_64.sh
```

インストール時の質問に対しては、次のように回答。

| #    | 質問                                                         | 回答  |
| ---- | ------------------------------------------------------------ | ----- |
| 1    | Do you accept the license terms?                             | yes   |
| 2    | Miniconda３ will now be installed into this location         | ENTER |
| 3    | Do you wish the installer to initialize Miniconda3 by running conda init? | yes   |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/b5b3fb93-8a47-1001-a0d6-991e1ed821b1.png)

### Miniconda の channel を conda-forge に変更

```bash
exit
```

```powershell
# re-login
wsl -d $tgt_wsl_distro_name
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/13187818-6937-f5e3-5196-1f848e30882a.png)

現在のチャネル一覧を取得

```bash
conda config --get channels
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/c39718d2-2b25-f876-44d0-569ffeb1e240.png)


```bash
# Add conda-forg channel
conda config --add channels conda-forge
```

```bash
# Delete default channel
conda config --remove channels default
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/4a6ff7f1-7c23-389d-0204-4c2001ccf6cc.png)


default がなくなり、 conda-forge だけとなっていることを確認

```bash
conda config --get channels
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/7b62b10d-0f6b-76c4-86f2-a5837fbf5577.png)

### Conda 環境の構築


```bash
conda create -n dbr-15 python=3.11 -c conda-forge
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/db568df4-8584-f81f-bd29-721bce015dd2.png)


利用するクラスターのバージョンに合わせて、 python バージョンを変更する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/436d9ef3-6808-ea8d-9743-6f1910213d50.png)

引用元：[Databricks Connect for Python をインストールする - Azure Databricks | Microsoft Learn](https://learn.microsoft.com/ja-jp/azure/databricks/dev-tools/databricks-connect/python/install#requirements)

```bash
conda activate dbr-15
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/8909abac-8582-886b-82b5-3eb936176882.png)

### Databricks extention に必要なライブラリをインストール

Databricks Connect をインストールします。手順作成後に気づいたのですが、ドキュメントにて VS Code に拡張機能をインストールした場合には、 Databricks Connect のインストールが不要である旨の記述をみつけました。本手順は省略可能である可能性があります。

```bash
pip install --upgrade "databricks-connect==15.4.*"
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/73547a66-e148-b108-22c4-da468747d2a2.png)

> Visual Studio Code 用の Databricks 拡張機能には Databricks Connect が含まれているため、Visual Studio Code 用の Databricks 拡張機能をインストールしている場合は、Databricks Connect をインストールする必要はありません。

引用元：[Databricks Connect とは - Azure Databricks | Microsoft Learn](https://learn.microsoft.com/ja-jp/azure/databricks/dev-tools/databricks-connect/)

Jupyter 関連のライブラリをインストールします。

```bash
pip install ipython ipykernel
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/3d1b308c-be64-a77b-6dd3-1504ace37978.png)

pytest をインストールします。

```bash
pip install pytest
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/9059f52b-29e2-b564-ae11-f918718aacea.png)

unzip をインストールします。

```bash
sudo apt update && sudo apt install -y unzip
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/96aec2f5-8e15-09c0-231b-edb709e82877.png)


Databricks CLI をインストールします。

```bash
curl -fsSL https://raw.githubusercontent.com/databricks/setup-cli/main/install.sh | sudo sh
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/e6cbf3c0-bea0-0b0d-cbce-75d4534c2061.png)


databricks auth login --host 

```bash
databricks -v
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/96f1f157-8a29-b411-8d9c-94f18e20b559.png)


## Databricks プロジェクトの作成と設定

### 作業用ディレクトリを作成

```bash
cd
mkdir source
cd source
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/f726d7ee-4ee2-e8e2-3c6b-6cde3b8c4347.png)

### VS code の設定

VS Code を起動します。

```bash
code .
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/3883a189-f12e-e635-af64-5dcf453f26c8.png)

Databricks extension を WSL にインストールします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/bf93ac1b-632b-95fa-14a1-a87855135d01.png)

### 

### Databricks プロジェクトを作成

VS Code にて左側タブにある Databricks -> フォルダとプラスのロゴ（Initialize a new project）を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/06ed92b9-0ef5-6f07-b720-e8f5e3af6368.png)
Databricks Workspace の URL を入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/86140273-f6bd-04da-a9c3-81e4bf5a2d9c.png)

認証方法を選択します。私は OAuth を選択しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/2d377030-693f-804c-26e3-328cbeeb684c.png)

DEFAULT と入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/449ffdd3-8a17-b4b4-d7ae-e1c0095b41b0.png)


---
＜暫定対応ここから＞

上記方法で初回の検証時は動作したのですが、 OAuth 認証が想定通りにいかず CLI にてプロファイルを作成する下記手順を実施しました。

```bash
databricks auth login --host {workspace_url}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/f944e9a4-bf4e-a96d-657e-5a463326a1c4.png)

ブラウザにて、認証を実施します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/f1e06ff2-ee2a-9b65-3e6b-fe0a5ff921db.png)

Databricks extension にて作成したプロファイルを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/0c0a4a33-8508-10c1-743a-972fc5f1ab89.png)

＜暫定対応ここまで＞

---

プロジェクトを作成するディレクトリを指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/1a104150-8599-c681-9071-487e4691b6ce.png)

VS Code の Editor 画面にて、 Databricks Project の設定値を入力します。default-python のテンプレートにて、任意の名前を設定した上で、それ以外の項目を yes と入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/c55f422c-b467-cd1d-b6f1-1df6935bdd05.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/1ea5a93f-7700-ede5-3c3c-b026ee8c41ae.png)

Databricks プロジェクトの作成が完了した旨のメッセージ表示後、 Enter を入力して Databricks プロジェクトの作成画面を閉じます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/4b245a44-d9f1-c11c-4a89-cca2b56fd6a5.png)

### クラスターの設定

VS Code 左側タブにある Databricks -> `Select a cluster`を選択し、利用する Databricks クラスターを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/cd5446b6-38ac-c4c4-685e-12814b8f0882.png)

src 配下にある notebook.ipynb を開き、Python カーネルを本手順で作成した python 環境を指定した上で実行できることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/634c7ffa-4647-e9ec-4cba-b1a57a54c964.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/e697ecd8-0389-fedf-d317-aa915ca2ee82.png)

## コードの実行

### Databricks Workspace 上でコードを実行できることを確認

Databricks -> 読み込みロゴ（Start Synchronization）を選択する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/5407693c-7ad0-8758-e09b-9b5d27f01eeb.png)

横にある Open link externally を選択し、 Databricks Workspace に接続します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/40cb79eb-fcfb-e0fc-bc49-9123aa47828f.png)

ローカル上にあるコードが Databricks Workspace に同期されていることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/18e70ad3-3eb9-b1ca-08f6-ef25137547fe.png)

Databricks ノートブックを実行できることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/77019c1d-9462-ada5-b8c5-ef78de79132e.png)

本手順では同期先が通常のフォルダになってしまうため、 Git フォルダに変更する暫定対応方法を下記の記事で紹介しています。

- [Databricks extension for Visual Studio Code にて Databricks Workspace への同期先を Git フォルダにする方法 #Python - Qiita](https://qiita.com/manabian/items/bc05511f5eee3d88462a)

### VS Code 上で Python コード を実行できることを確認

VS Code 上で下記コードを記述した demo.py というファイルを作成し、コードを実行できることを確認します。実行する際には右上の Databricks のロゴにて選択できる Run current file with Databricks Connect を選択します。

```python
df = spark.read.table("samples.nyctaxi.trips")
df.show(5)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/663aad3e-cd50-9e7f-3916-1f60661b6929.png)

出力結果がターミナルに表示され、正常に動作していることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/9d337e3b-7e99-6947-176e-6399a0664e1e.png)

### VS Code 上で Jupyter 形式のノートブックを実行できることを確認

VS Code 上で下記コードを記述した demo2.ipynb というファイルを作成し、コードを実行できることを確認します。

```python
df = spark.read.table("samples.nyctaxi.trips")
df.show(5)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/288d7773-8ab6-4db9-c69a-c1d49e590db8.png)

ノートブック実行に関するドキュメントにて、 SparkSession の定義は不要であることが記述されていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/e3688aa3-c1bc-701f-0ee1-8e9e992938e0.png)

引用元：[Visual Studio Code用Databricks拡張機能を使用したDatabricks Connectによるノートブックセルの実行とデバッグ - Azure Databricks | Microsoft Learn](https://learn.microsoft.com/ja-jp/azure/databricks/dev-tools/vscode-ext/notebooks#notebook-globals)

### VS Code 上で Python 形式でノートブックとして実行できることを確認

VS Code 上で下記コードを記述した demo3.py というファイルを作成し、コードを実行できることを確認します。Python ファイルを、インタラクティブにノートブックのように実行するには、コードの上に表示されている`セルの実行`を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/58651486-8669-d1f1-20a8-cb24b09103aa.png)

### Test タブを実行できることを確認

VS Code 上で下記の値を記述した .env というファイルを作成します。`{profile_name}`にはプロファイル名（例：`DEFAULT`）を、`{databricks_cluster_id}`には Databricks クラスターの ID を設定します。

```env
DATABRICKS_CONFIG_PROFILE={profile_name}
DATABRICKS_CLUSTER_ID={databricks_cluster_id}
```

VS Code のテストタブにあるテストを実行し、正常終了することを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/e1e0571a-d4b3-d1d2-15e2-b9ce908764e9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/a5d1246f-c8e5-c0b7-e134-08e0e574c669.png)


Databricks クラスターへの接続方法として、DATABRICKS_CONFIG_PROFILE 環境変数による方法を実施しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/4949b8ca-bed6-03a7-bb61-1b388305c985.png)

引用元：[Databricks Connect for Python をインストールする - Azure Databricks | Microsoft Learn](https://learn.microsoft.com/ja-jp/azure/databricks/dev-tools/databricks-connect/python/install#config-profile-env-var)


`DatabricksSession`クラスと`SparkSession`クラスを切り替える方法として、下記の方法がドキュメントにて紹介されています。この基準を行うことで、ローカル（VS Code）上と Databricks Workspace 上のいずれの場合でもコードを実行できそうです。

```python
def get_spark() -> SparkSession:
  try:
    from databricks.connect import DatabricksSession
    return DatabricksSession.builder.getOrCreate()
  except ImportError:
    return SparkSession.builder.getOrCreate()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/e03159b4-6535-7b5a-7df5-f3d2ad98e313.png)

引用元：[Databricks Connect for Python のコード例 - Azure Databricks | Microsoft Learn](https://learn.microsoft.com/ja-jp/azure/databricks/dev-tools/databricks-connect/python/examples)