Databricks extension for Visual Studio Code を試してみる



# はじめに

Databricksでは基本的にNotebook baseでの開発を中心としており、ローカルのIDEでの開発という観点では。。。という感じでした。この度**Databricks for Visual Studio Code**が発表され、IDEでの開発もしやすくなったとのことなので早速試してみたいと思います。

:::note info
こちらのマニュアルを参考にしております。詳細はマニュアルをご覧ください。
https://docs.databricks.com/dev-tools/vscode-ext.html
:::


動画で確認したい方はこちらをご覧ください。
https://www.youtube.com/watch?v=jAXxViBI3Ho

# どんな事ができるのか？

- Visual Studio Codeで開発したローカルコードをリモートワークスペースと同期させ実行することができます。


- Visual Studio Code からローカルの Python コードファイル (.py) および Python ノートブック (.py と .ipynb) を、リモートワークスペース内の自動化された Databricks ジョブとして実行します。

- VSCode上からDatabricks Clusterを起動・シャットダウンできる。

- Debugできる（databricks connectとの連携が必要）

# 利用要件

利用するには以下の環境条件を満たす必要があります。
- Databricks Workspace : ([詳細はこちら](https://docs.databricks.com/dev-tools/vscode-ext.html#workspace-requirements))
    - Clusterが作成されていること　(SQLWarehouseはサポートされておりません）
    - ~~Databricks Reposが使える事 ([同期するためのRepositoryを作成](https://qiita.com/drafts#%E5%90%8C%E6%9C%9F%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AEworkspace-repository%E4%BD%9C%E6%88%90))~~ (Repos以外にもWorkspaceを使用できるようになりました)


- Local開発環境 ([詳細はこちら](https://docs.databricks.com/sql/user/security/personal-access-tokens.html))
    - Visual Studio Code version 1.69.1 or higher.
    - **A Databricks CLI & configuration profile**([setupはこちら](https://docs.databricks.com/dev-tools/cli/index.html))
  

# Getting Started

1. [VSCode Marketplace](https://marketplace.visualstudio.com/items?itemName=databricks.databricks)から"Databricks for Visual Studio Code"を検索してInstallします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/f30d0a7e-458d-b81f-ed89-1935291798cd.png)



# 構成をセットアップする

RemoteのDatabricks環境と連携するために、以下をセットアップする必要があります。

### 1.Extension設定にて同期する先を選択します。（今回はWorkspaceを選択）

「Code」メニュー　 -> 「基本設定」 -> 「設定」　-> 「Extension」 - 「Databricks」にて、以下の設定画面を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/2067bc17-d07b-8ae0-7989-52651a206d59.png)

「Destination Type」にて、`workspace`を選択します。（もちろん、Reposのままでも結構です）


### 2.Databricks構成情報のセットアップ

Databricks icon -> Configure Databricks にてセットアップ

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/ec432145-2540-c3b6-c2bc-800606a0c188.png" width='600'>

#### Databricks CLIで作成したプロファイルを選択する

私の環境では４つのワークスペース用のプロファイルがあるので４つ出てきました。　ここで新規プロファイル作成も可能です。このプロファイルは、対象となるDatabricks Workspaceにアクセスするための情報が保存されてます。([Databricks CLI setupはこちら](https://docs.databricks.com/dev-tools/cli/index.html))

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/94b9da8a-c872-c26b-11d1-d9f1242f556e.png)

#### Clusterの選択

プロファイルを使って無事にWorkspaceと連携出来ると、左のペインにクラスターリストが表示されます。今回利用するクラスターをアタッチします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/ba53cf31-b9c3-78b5-73e3-189c37d16552.png)


#### ファイルの同期

ギアマークの左にある同期マークをクリックすると、ローカルのコードがDatabricks Workspace(もしくはRepos)と同期されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/9d9e2d79-9e5f-ede7-efa1-f1f1bf95645a.png)

:::note warn
Databricks for Visual Studio Codeは、ローカルのVisual Studio CodeプロジェクトからリモートのDatabricksワークスペースにある関連リポジトリへのファイル変更の一方向の自動同期のみを実行するものです。[詳細はこちらをご覧ください](https://docs.databricks.com/dev-tools/vscode-ext.html#set-the-repository)
:::

同期されると、ワークスペース側に .ideというフォルダーが作成されております。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/756086ad-870b-7248-eb4d-e63c0772fd2f.png)


# 使ってみよう

## 1. python fileとして Databricks Cluster上で実行する

こちらのサンプルのPythonファイルを保存して実行してみます。

```python:demo.py
from pyspark.sql import SparkSession
from pyspark.sql.types import *

spark = SparkSession.builder.getOrCreate()

schema = StructType([
  StructField('CustomerID', IntegerType(), False),
  StructField('FirstName',  StringType(),  False),
  StructField('LastName',   StringType(),  False)
])

data = [
  [ 1000, 'Mathijs', 'Oosterhout-Rijntjes' ],
  [ 1001, 'Joost',   'van Brunswijk' ],
  [ 1002, 'Stan',    'Bokenkamp' ]
]

customers = spark.createDataFrame(data, schema)
customers.show()
```

VSCodeの右上の実行ボタンを選択し、「**Run File on Databricks**」を実行する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/82763984-d6d3-f9db-9709-6d6c39f0147a.png)

実行結果が下のデバッグコンソールに出力されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/c1ea8914-58f5-6edd-13ac-a5685571f0dd.png)

## 2. Jobとして実行する

コードファイルを開いて、右上の実行ボタンから「Run File as Workflow on Databricks」を実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/1fe35963-e872-d587-02c1-47a769398016.png)

VSCode上に Job実行結果が出力されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/eda2645a-ecb1-8f5d-285d-a694fb751108.png)

Databricks上でもジョブを確認できます。ちなみにクラスターは指定したクラスター上で実行されます。（新規ジョブクラスターが作られるわけでは無い）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/095a80bf-a734-30f9-214f-35f4f4d8ae32.png)

## 3. Python NotebookをJobとして実行する

:::note 
databricks notebookとして実行するには、.py ファイルの最初の行に `# Databricks notebook source` を追加します。またセルを追加するには、`# COMMAND ---------- ` を追加します。
:::

以下のサンプルコードをご利用ください。

```python:demo-notebook.py
# Databricks notebook source

from pyspark.sql import SparkSession
from pyspark.sql.types import *

spark = SparkSession.builder.getOrCreate()

schema = StructType([
  StructField('CustomerID', IntegerType(), False),
  StructField('FirstName',  StringType(),  False),
  StructField('LastName',   StringType(),  False)
])

# COMMAND ----------

data = [
  [ 1000, 'Mathijs', 'Oosterhout-Rijntjes' ],
  [ 1001, 'Joost',   'van Brunswijk' ],
  [ 1002, 'Stan',    'Bokenkamp' ]
]

# COMMAND ----------
customers = spark.createDataFrame(data, schema)
customers.show()
```

Run File as Workflow on Databricksを実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/1fe35963-e872-d587-02c1-47a769398016.png)

このようにノートブックを実行した際の結果が新規タブに表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/ffb1dffc-f0ce-fe74-443b-b804abb75986.png)


## 4. Debug実行

Debug実行するためには、Databricks Connectをセットアップしなければいけません。
そちらについては、別の記事をご覧ください。
[Databricks Extension for VSCodeでDebugがサポートされました](https://qiita.com/maroon-db/items/286e269f64067137468f)