ワークスペース ファイルをプログラムで操作する

Azure Databricks に格納されているワークスペース ファイルをプログラムで操作できます。 これにより、次のようなタスクが可能になります:

  • ノートブックとコードと共に小さなデータ ファイルを格納する。
  • Git と同期されたディレクトリへのログ ファイルの書き込み。
  • 相対パスを使用したモジュールのインポート。
  • 環境仕様ファイルの作成または変更。
  • ノートブックからの出力の書き込み。
  • Tensorboard などのライブラリの実行からの出力の書き込み。

Databricks Runtime 11.3 LTS 以降では、ワークスペース ファイルをプログラムで作成、編集、削除できます。

Note

ワークスペース ファイルへの書き込みを無効にするには、クラスター環境変数 WSFS_ENABLE_WRITE_SUPPORT=false を設定します。 詳細については、「環境変数」を参照してください。

Note

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")

Azure Databricks 上のファイルの詳細については、Azure Databricks でのファイル操作に関する記事をご覧ください。

プログラムによってファイルとディレクトリを作成、更新、削除する

Databricks Runtime 11.3 LTS 以降では、Azure Databricks でワークスペース ファイルを直接操作できます。 次の例では、標準の Python パッケージと機能を使用して、ファイルとディレクトリを作成および操作します。

# 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')