Databricksのボリューム機能による画像ファイルの取り扱い

こちらの記事で触れているボリューム機能を画像ファイルの取り扱いを通じてウォークスルーします。

https://qiita.com/taka_yayoi/items/3acb6c69458f9c1253be

# 画像アーカイブファイルのダウンロード

こちらのzipファイルをローカルマシンにダウンロードします。

https://www.kaggle.com/datasets/tongpython/cat-and-dog/

![Screenshot 2023-10-25 at 19.21.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/563fc362-84a4-3c3a-c70f-28f92138dd21.png)

# ボリュームへのアーカイブファイルのアップロード

すでに作成済みのボリュームにアップロードします。作成方法は[こちら](https://qiita.com/taka_yayoi/items/453026daacf71ba5662f)をご覧ください。

カタログエクスプローラにアクセスして、対象のボリュームにアクセスします。そして、**このボリュームにアップロード**ボタンをクリックします。
![Screenshot 2023-10-25 at 19.24.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/13aaca8d-b4ad-da4b-e7e9-76aef26d3316.png)

ダウンロードしたアーカイブファイルをドラッグ&ドロップします。
![Screenshot 2023-10-25 at 19.24.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/c36da30f-e17c-9810-2cc2-aa245fca3187.png)
![Screenshot 2023-10-25 at 19.24.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/76743d7d-1aaa-6147-afbe-20536780f84a.png)

**アップロード**をクリックすると、アップロードが開始しますので少々待ちます。
![Screenshot 2023-10-25 at 19.24.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/3ba8fdac-5b07-3633-83df-e24be9700586.png)

アップロードされました。
![Screenshot 2023-10-25 at 19.28.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/74937935-3747-bbfd-bf2e-dc82b1a3e945.png)

# ボリュームのファイルの操作

ノートブックから操作するので、新規にノートブックを作成します。ノートブック左側の![Screenshot 2023-10-25 at 19.36.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/23399de2-c22b-2578-55ef-95b010b99659.png)**カタログ**をクリックすると、ノートブックの隣にカタログエクスプローラの簡易版が表示されます。アーカイブファイルにマウスカーソルを移動すると3点リーダーが表示されるので、そちらをクリックすると**volume fileパスをコピー**メニューが表示されるので選択します。これでボリューム上のファイルのパスがコピーされます。

以下のコマンドを実行して、ファイルをunzipします。

```sh:shell
unzip /Volumes/takaakiyayoi_catalog/quickstart_schema/quickstart_volume/archive.zip -d /Volumes/takaakiyayoi_catalog/quickstart_schema/quickstart_volume/catsanddogs/
```

普通のファイルシステム同様に解凍処理が行われます。
![Screenshot 2023-10-25 at 19.39.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/8f9e4d10-62df-75ac-63fb-7e4a0ceec633.png)

約1万ファイルあるので、それなりに時間がかかります。

```sh:shell
%sh
find /Volumes/takaakiyayoi_catalog/quickstart_schema/quickstart_volume/catsanddogs/ -type f | wc -l
```
```
10032
```

って、普通にシェルコマンド使えますね。

このセクションの最後として画像を確認します。

```py:Python
from PIL import Image

image_to_classify = "/Volumes/takaakiyayoi_catalog/quickstart_schema/quickstart_volume/catsanddogs/test_set/test_set/cats/cat.4010.jpg"
image = Image.open(image_to_classify)
display(image)
```

むはー、って普通のファイルシステムと同じようにアクセスできます。
![Screenshot 2023-10-25 at 20.30.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/b9c10b7d-46e1-6de6-bbcd-24d200c88b66.png)


# テーブルへの登録

まず、[Sparkの画像データソース](https://qiita.com/taka_yayoi/items/8d4b1b61699d68a34e58)を使ってデータフレームにロードします。

```py:Python
# 画像データソースを用いて画像データソースを作成します
image_df = spark.read.format("image").load("/Volumes/takaakiyayoi_catalog/quickstart_schema/quickstart_volume/catsanddogs/test_set/test_set/cats")

# データフレームを表示します
display(image_df) 
```

むふー、これだけで癒されます。猫派です。
![Screenshot 2023-10-25 at 20.18.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/8643f55d-b231-f423-3c70-556fcf0053cc.png)

これをテーブルとしてUnity Catalogに保存します。

```py:Python
image_df.write.format("delta").mode("overwrite").saveAsTable("takaakiyayoi_catalog.quickstart_schema.cat_test_image")
```

カタログエクスプローラでテーブルを確認できます。
![Screenshot 2023-10-25 at 20.24.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/031737e4-6562-107e-40af-56c2f93a7ea4.png)

リネージを確認するために**依存関係**をクリックします。**パス**をクリックすると、どのボリュームからこのテーブルが作成されたのかを確認できます。
![Screenshot 2023-10-25 at 20.25.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/e6b9f5f4-761e-04ac-6b19-ab57c347e75d.png)

さらに、**リネージグラフを表示**をクリックすると依存関係をグラフィカルに確認することができます。
![Screenshot 2023-10-25 at 20.26.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/74712e9a-e51d-a216-0829-175a9de367e2.png)


# まとめ

これまではDBFSにファイルをアップロードするアプローチしか無かったのですが、ボリュームを使うことでより洗練されたGUIでファイルを操作でき、かつ、Unity Catalogによるアクセスコントロールやリネージの機能を活用できます。ぜひご活用ください！

### Databricksクイックスタートガイド

[Databricksクイックスタートガイド](https://www.amazon.co.jp/dp/B09V1YXFVQ/)


### Databricks無料トライアル

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