こちらの記事で触れているボリューム機能を画像ファイルの取り扱いを通じてウォークスルーします。
画像アーカイブファイルのダウンロード
こちらのzipファイルをローカルマシンにダウンロードします。
ボリュームへのアーカイブファイルのアップロード
すでに作成済みのボリュームにアップロードします。作成方法はこちらをご覧ください。
カタログエクスプローラにアクセスして、対象のボリュームにアクセスします。そして、このボリュームにアップロードボタンをクリックします。
ダウンロードしたアーカイブファイルをドラッグ&ドロップします。
アップロードをクリックすると、アップロードが開始しますので少々待ちます。
ボリュームのファイルの操作
ノートブックから操作するので、新規にノートブックを作成します。ノートブック左側のカタログをクリックすると、ノートブックの隣にカタログエクスプローラの簡易版が表示されます。アーカイブファイルにマウスカーソルを移動すると3点リーダーが表示されるので、そちらをクリックするとvolume fileパスをコピーメニューが表示されるので選択します。これでボリューム上のファイルのパスがコピーされます。
以下のコマンドを実行して、ファイルをunzipします。
unzip /Volumes/takaakiyayoi_catalog/quickstart_schema/quickstart_volume/archive.zip -d /Volumes/takaakiyayoi_catalog/quickstart_schema/quickstart_volume/catsanddogs/
約1万ファイルあるので、それなりに時間がかかります。
%sh
find /Volumes/takaakiyayoi_catalog/quickstart_schema/quickstart_volume/catsanddogs/ -type f | wc -l
10032
って、普通にシェルコマンド使えますね。
このセクションの最後として画像を確認します。
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)
むはー、って普通のファイルシステムと同じようにアクセスできます。
テーブルへの登録
まず、Sparkの画像データソースを使ってデータフレームにロードします。
# 画像データソースを用いて画像データソースを作成します
image_df = spark.read.format("image").load("/Volumes/takaakiyayoi_catalog/quickstart_schema/quickstart_volume/catsanddogs/test_set/test_set/cats")
# データフレームを表示します
display(image_df)
これをテーブルとしてUnity Catalogに保存します。
image_df.write.format("delta").mode("overwrite").saveAsTable("takaakiyayoi_catalog.quickstart_schema.cat_test_image")
リネージを確認するために依存関係をクリックします。パスをクリックすると、どのボリュームからこのテーブルが作成されたのかを確認できます。
さらに、リネージグラフを表示をクリックすると依存関係をグラフィカルに確認することができます。
まとめ
これまではDBFSにファイルをアップロードするアプローチしか無かったのですが、ボリュームを使うことでより洗練されたGUIでファイルを操作でき、かつ、Unity Catalogによるアクセスコントロールやリネージの機能を活用できます。ぜひご活用ください!