プログラムでワークスペース ファイルを操作する
Databricks に格納されているワークスペース ファイルをプログラムで操作できます。 これにより、次のようなタスクが可能になります。
- 小さなデータファイルをノートブックやコードと一緒に保存します。
- Git と同期されたディレクトリにログファイルを書き込む。
- 相対パスを使用したモジュールのインポート。
- 環境仕様ファイルを作成または変更する。
- ノートブックからの出力の書き込み。
- TensorBoardのようなライブラリの実行による出力の書き込み。
Databricks Runtime 11.3 LTS 以降では、ワークスペース ファイルをプログラムで作成、編集、名前変更、削除できます。 ノートブック向けの本機能は、 Databricks Runtime 16.2 以降、およびサーバレス環境 2 以降でサポートされています。
ワークスペース ファイルへの書き込みを無効にするには、クラスター環境変数 WSFS_ENABLE_WRITE_SUPPORT=falseを設定します。 詳細については、 環境変数を参照してください。
In Databricks Runtime 14.0 and above, the default current working directory (CWD) for code executed locally is the directory containing the notebook or script being run.This is a change in behavior from Databricks Runtime 13.3 LTS and below.See What is the default current working directory?.
On Serverless コンピュート, the working directory is not guaranteed, so use absolute paths to reference files.See Serverless コンピュート limitations.
ファイルの場所の読み取り
シェルコマンドを使用して、リポジトリやローカルファイルシステムなどのファイルの場所を読み取ります。
ファイルの場所を特定するには、次のように入力します。
%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を使用します。
ファイルへの絶対パスまたは相対パスは、ファイルの横にあるドロップダウンメニューからコピーできます。
![[ファイル] ドロップダウン メニュー](/aws/ja/assets/images/file-drop-down-1e2f03e121f2da94e468e4d4e926a3d5.png)
次の例は、 {os.getcwd()} を使用してフル パスを取得する方法を示しています。
import os
spark.read.format("csv").load(f"file:{os.getcwd()}/my_data.csv")
DBFSルートとマウントが無効になっているワークスペースでは、 dbfs:/Workspace使用してDatabricksユーティリティでワークスペース ファイルにアクセスすることもできます。 これには、Databricks Runtime 13.3 LTS 以上が必要です。DBFSルートへのアクセスを無効にし、既存のDatabricksワークスペースにマウントする」を参照してください。
Databricks 上のファイルの詳細については、Databricks 上のファイルの操作を参照してください。
プログラムによるファイルやディレクトリの作成、更新、削除
Databricks では、標準のファイル システムでファイルを操作するのと同様に、ワークスペース ファイルをプログラムで操作できます。
Databricks Runtime 16.2 以降、およびサーバレス環境 2 以降では、ファイルとのすべてのプログラムによる対話をノートブックでも使用できます。ノートブックへのファイルの変換に関する情報については、「 ノートブックへのファイルの変換」を参照してください。
ファイルに書き込む前に、そのファイルの親ディレクトリがすでに存在している必要があります。Databricks はファイルの書き込みをバッファリングし、非同期でワークスペースにフラッシュするため、親ディレクトリが存在しないパスへの書き込みは、書き込み時ではなく書き込み呼び出し後に AsyncFlushFailedException で失敗します。次の例に示すように、最初に親ディレクトリを作成します。
次の例では、標準の 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/")
重複するアセット名を解決する
たとえば、ワークスペースフォルダにはすでに同じ名前のアセットが含まれている場合があります。たとえば、2つの SQL クエリーのどちらも My query という名前である場合があります。これは、名前の一意性が完全に強制される前にアセットが作成された場合に発生する可能性があります。
フォルダに重複するアセット名が含まれている場合、アセット自体は影響を受けませんが、そのフォルダへのファイルベースのアクセスは失敗します。以下のようなエラーが表示される場合があります。
Name not unique on network(OSError: [Errno 76])—たとえば、Webターミナルでlsやその他のコマンドを実行したり、ノートブックからフォルダを一覧表示したりする場合です。File name conflictまたはRESOURCE_CONFLICT: Duplicate entities detected in the directory— たとえば、Git フォルダの操作中など
重複する名前はアセット自体には影響しません。ワークスペースブラウザから各アセットを開いて使用することもできます。Webターミナル、WSFS、Gitフォルダ操作など、ファイルシステム経由でフォルダに到達するコマンドのみが影響を受けます。
同名の資産を検索するには、次のノートブックを実行します。フォルダとそのサブフォルダをスキャンし、同じ名前を共有する資産を一覧表示します。このノートブックは読み取り専用であり、資産の名前変更や削除は行いません。
重複するワークスペースアセットを検索
ワークスペースUIを使用して重複する名前を解決するには:
- ワークスペースブラウザで、ノートブックによって特定された各フォルダーを開きます。
- フォルダー内のすべてのアセットが一意の名前を持つようになるまで、重複するアセットの名前を変更するか削除します。
フォルダ内のすべてのアセット名が一意になると、ファイルベースのアクセスが再び機能します。