こちらの記事を書いてから10ヶ月ほど経ちました。
こちらの記事では、DBFS(Databricks File System)とクラスターローカルのファイルシステムのみに言及しました。
その後、ファイルを取り扱う目的で以下の機能がDatabricksに導入されました。
こちらの記事では、これらの新機能とDBFSの違いをまとめます。
サマリー
観点 | DBFS | ワークスペースファイル | ボリューム |
---|---|---|---|
ワークスペース横断でのアクセス | 不可 | 不可 | 可能 |
アクセスコントロール | 不可 | ファイル単位に設定可能 | ボリューム単位に設定可能 |
ファイルエディタのサポート | 無し | 有り | 無し |
ファイルサイズの制限 | アップロードできるファイルサイズは最大2GB | 200MB | 無し |
想定用途 | 一時ファイルの保存 | Pythonモジュールのインポート、git連携 | 大規模ファイルの読み書き |
その他 | プロダクション用途での利用は非推奨 |
|
ここでのワークスペース横断でのアクセスとは、複数のDatabricksワークスペースから同じファイルにアクセスできるかどうかを意味しています。
ノートブックからインポートするpyファイルであればワークスペースファイル、それ以外の非構造化データファイルであればボリュームを使うのが推奨となります。
DBFSとは
(少なくとも私がDatabricksに入社した3年前の)昔から存在しているファイルシステム。アクセスコントロールができないので、プロダクション用途での利用はお勧めしていません。現時点では、一時ファイルを格納しておくくらいしか使い道はありません。
- ワークスペース横断でのアクセス: 不可
- アクセスコントロール: 不可
- ファイルエディタのサポート: 無し
- ファイルサイズの制限: アップロードできるファイルサイズは最大2GB
- 想定用途: 一時ファイルの保存
- その他: プロダクション用途での利用は非推奨
GUIからであれば、カタログエクスプローラから参照することができます。これ以外にPythonなどのプログラミング言語から操作することができます。
パスの指定方法は使用するコマンドによって変わります(これがややこしい)。
PySparkなどの分散ファイルシステム前提のコマンドでは何も変更を加えずにファイルへのパスを指定します。以下の例では明示的にdbfs:
スキーマを付与しています。
df = spark.read.format("delta").load('dbfs:/databricks-datasets/learning-spark-v2/people/people-10m.delta')
display(df)
Pandasのようなローカルファイル前提のコマンドでは、パスの先頭に/dbfs
を追加します。
import pandas as pd
df = pd.read_csv("/dbfs/databricks-datasets/wine-quality/winequality-red.csv", sep=";")
display(df)
ワークスペースファイルとは
ノートブックと同じ場所でノートブック以外のPythonファイルなどを格納、編集できるようにした機能。元々はRepos限定の機能でしたが、2023/4からワークスペースのどこでも利用できるようになりました。
- ワークスペース横断でのアクセス: 不可
- アクセスコントロール: ファイル単位に設定可能
- ファイルエディタのサポート: 有り
- ファイルサイズの制限: 200MB
- 想定用途: Pythonモジュールのインポート、git連携
ワークスペースファイルのパスの指定方法は以下の通りとなります。どのようなコマンドであってもパスの指定方法は依存しません。
Repos内のファイル
file:/Workspace/Repos/<user-folder>/<repo-name>/path/to/file
それ以外の場所のファイル
file:/Workspace/Users/<user-folder>/path/to/file
以下のようにしてアクセスできます。
%sh
head /Workspace/Users/takaaki.yayoi@databricks.com/20231025_volumes/power.py
def n_to_mth(n,m):
print(n, "の", m, "乗は", n**m)
ボリュームとは
ファイル格納の機能としては最新のものです。2023/7にパブリックプレビュー。
- ワークスペース横断でのアクセス: 可能
- アクセスコントロール: ボリューム単位に設定可能
- ファイルエディタのサポート: 無し
- ファイルサイズの制限: 無し
- 想定用途: 大規模ファイルの読み書き
- その他: Unity Catalogが前提。ボリュームのファイルからテーブルを作成するとリネージを生成
ボリューム上のファイルもカタログエクスプローラから確認できます。
ボリューム上のファイルからテーブルを作成すると、リネージも作成されます。
ワークスペースファイルと同じようにPythonからアクセスできます。
パスの指定方法は一番シンプルです。コマンドに関係なく以下の通りとなります。
/Volumes/<catalog>/<schema>/<volume>/<path>/<file-name>
%sh
ls /Volumes/takaakiyayoi_catalog/quickstart_schema/quickstart_volume/catsanddogs/test_set/test_set/cats
_DS_Store
cat.4001.jpg
cat.4002.jpg
cat.4003.jpg
cat.4004.jpg
cat.4005.jpg
cat.4006.jpg
cat.4007.jpg
cat.4008.jpg
cat.4009.jpg
cat.4010.jpg
cat.4011.jpg