プログラムでワークスペース ファイルを操作する
Databricks に格納されているワークスペース ファイルをプログラムで操作できます。 これにより、次のようなタスクが可能になります。
- 小さなデータファイルをノートブックやコードと一緒に保存します。
- Git と同期されたディレクトリにログファイルを書き込む。
- 相対パスを使用したモジュールのインポート。
- 環境仕様ファイルを作成または変更する。
- ノートブックからの出力の書き込み。
- TensorBoardのようなライブラリの実行による出力の書き込み。
Databricks Runtime 11.3 LTS 以降では、ワークスペース ファイルをプログラムで作成、編集、名前変更、削除できます。 ノートブック向けの本機能は、 Databricks Runtime 16.2 以降、およびサーバレス環境 2 以降でサポートされています。
ワークスペース ファイルへの書き込みを無効にするには、クラスター環境変数 WSFS_ENABLE_WRITE_SUPPORT=false
を設定します。 詳細については、 環境変数を参照してください。
Databricks Runtime 14.0 以降では、ローカルで実行されるコードのデフォルト カレント ワーキング ディレクトリ (CWD) は、実行されているノートブックまたはスクリプトを含むディレクトリです。これは、Databricks Runtime 13.3 LTS 以下からの動作の変更です。 「デフォルトの現在の作業ディレクトリとは」を参照してください。
ファイルの場所の読み取り
シェルコマンドを使用して、リポジトリやローカルファイルシステムなどのファイルの場所を読み取ります。
ファイルの場所を特定するには、次のように入力します。
%sh ls
- ファイルがリポジトリにない: このコマンドは、ファイルシステムを
/databricks/driver
で返します。 - ファイルはリポジトリにある: このコマンドは、
/Workspace/Repos/name@domain.com/public_repo_2/repos_file_system
などの仮想化リポジトリを返します。
データ ワークスペース ファイルの読み取り
ノートブックのコードから、 .csv
ファイルや .json
ファイルなどの小さなデータ ファイルをプログラムで読み取ることができます。 次の例では、Pandas を使用して、プロジェクト リポジトリのルートを基準にした /data
ディレクトリに格納されているファイルをクエリします。
import pandas as pd
df = pd.read_csv("./data/winequality-red.csv")
df
Spark を使用してデータ ファイルを読み取ることができます。 Spark に完全修飾パスを提供する必要があります。
- Git フォルダ内のワークスペース ファイルは、パス .
file:/Workspace/Repos/<user-folder>/<repo-name>/path/to/file
を使用します。 - 個人用ディレクトリ内のワークスペース ファイルは、パス
file:/Workspace/Users/<user-folder>/path/to/file
を使用します。
ファイルへの絶対パスまたは相対パスは、ファイルの横にあるドロップダウンメニューからコピーできます。
次の例は、 {os.getcwd()}
を使用してフル パスを取得する方法を示しています。
import os
spark.read.format("csv").load(f"file:{os.getcwd()}/my_data.csv")
Databricks 上のファイルの詳細については、Databricks 上のファイルの操作を参照してください。
プログラムによるファイルやディレクトリの作成、更新、削除
Databricks では、標準のファイル システムでファイルを操作するのと同様に、ワークスペース ファイルをプログラムで操作できます。
Databricks Runtime 16.2 以降、およびサーバレス環境 2 以降では、ファイルとのすべてのプログラムによる対話をノートブックでも使用できます。ノートブックへのファイルの変換に関する情報については、「 ノートブックへのファイルの変換」を参照してください。
次の例では、標準の Python パッケージと機能を使用して、ファイルとディレクトリを作成および操作します。
import os
# Create a new directory
os.mkdir('dir1')
# Create a new file and write to it
with open('dir1/new_file.txt', "w") as f:
f.write("new content")
# Append to a file
with open('dir1/new_file.txt', "a") as f:
f.write(" continued")
# Delete a file
os.remove('dir1/new_file.txt')
# Delete a directory
os.rmdir('dir1')
import shutil
# Copy a dashboard
shutil.copy("my-dashboard.lvdash.json", "my-dashboard-copy.lvdash.json")
# Move a query to a shared folder
shutil.move("test-query.dbquery","shared-queries/")