Databricks Extension for VSCodeでDebugがサポートされました


# はじめに
以前、[Databricks extension for Visual Studio Code](https://qiita.com/maroon-db/items/a4f6717f9a94765e36ec)にて、VSCode上で開発したコードをDatabricks上で実行したり、JobとしてWorkflow実行したりする方法をご紹介しました。

ただしSparkコードに対してDebug機能が利用できなかったため、開発も中途半端。という思いをされたのではないでしょうか？

この度 [Databricks Connect V2](https://www.databricks.com/jp/blog/2023/04/18/use-databricks-anywhere-databricks-connect-v2.html) がリリースされ、Sparkコードに対して、IDEやアプリからDatabricksのSpark Clusterを利用することが可能となりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/006618de-1bc9-95d4-9ada-064b50c60c77.png)


また、表題にあるとおり Databricks Extension for VSCodeと連携することで、Debugが可能となりました。今回は実際に設定して試してみたいと思います。

:::note 
なお、今回の設定はこちらの[マニュアル](https://docs.databricks.com/dev-tools/vscode-ext.html#run-or-debug-python-code-with-databricks-connect)を参考にしました。
:::

# 準備

1. Databricks Extension for VSCodeが利用できる状態。（[前回の記事を参照](https://qiita.com/maroon-db/items/a4f6717f9a94765e36ec)）
1. Databricks Cluster Runtime は 13.0以降(通常とML両方サポート）を予め用意

# dbconnectをTurn On

VSCodeのExtensionの設定画面にて、`debugging.dbconnect`を追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/729eae02-076d-039b-a773-ec434d64467e.png)

「表示」ー「コマンドパレット」にて、`Reload Window` を実行してリロードする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/9a5222e2-57f7-17ae-347c-632f185b795d.png)

VSCodeの左下に以下のような赤いメッセージが表示されるので、これをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/01be479a-e1fe-bc9b-e7e2-03665a98c98c.png)

databricks connectを installするかどうかメッセージが出てくるので、installする
(**venv環境にactivateした後に実行する**）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/23af2583-7439-a7e6-9f94-1eca27a3f5f8.png)

有効になっていると以下のように enableと表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/bdb9c90e-f791-912e-c287-4ca2b669c5ad.png)


設定は以上です。


# コード上の注意

dbconnectを利用してdebugするためには、コード上で以下のように追加してあげる必要があります。（Databricks Notebook上で実行する場合は、このような記述は不要だがDB Connectを利用する際には必要）

```python
from pyspark.sql import SparkSession

spark = SparkSession.builder.getOrCreate()
```

# デバッグの実行

それではDBR13以降のクラスターをアタッチして、コードをDebugしてみよう。

今回は以下のコードを実行
```python
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()
```

まずは、ブレークポイントを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/70174a6d-f02a-73a4-ade6-8a4a191cee17.png)

右上のドロップダウンから、`Pythonファイルのデバッグ`を実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/bcdffd79-8447-c923-1999-280c76219360.png)

ちゃんと機能してますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/3f8fff84-7576-7a92-715a-04c931203579.png)

そのまま実行を続けると、最終的な結果がコンソールに表示
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/91be293d-bda9-c1a6-3e67-829636be5289.png)


是非、お試しください。