プログラムによってワークスペース ファイルを操作する

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

注

DBFS ルートとマウントが無効になっているワークスペースでは、 dbfs:/Workspace を使用して Databricks ユーティリティを使用してワークスペース ファイルにアクセスすることもできます。 これには、Databricks Runtime 13.3 LTS 以降が必要です。 「既存の Azure Databricks ワークスペースで DBFS ルートとマウントへのアクセスを無効にする」を参照してください。

Azure Databricks 上のファイルの詳細については、「Azure Databricksでのファイルの操作」を参照してください。

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

Azure Databricks のワークスペース ファイルは、標準のファイル システム内のファイルを操作する方法と同様に、プログラムによって操作できます。

注

Databricks Runtime 16.2 以降およびサーバーレス環境 2 以降では、プログラムによるファイルとの対話はすべてノートブックでも使用できます。 ファイルをノートブックに変換する方法については、「ファイルをノートブック に変換する」を参照してください。

注

ファイルの親ディレクトリは、書き込みを行う前にすでに存在していなければなりません。 Azure 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])—例えばウェブターミナルで ls や他のコマンドを実行したり、ノートブックからフォルダをリストアップしたりする場合です。
  • File name conflict または RESOURCE_CONFLICT: Duplicate entities detected in the directory—たとえば、Git フォルダー操作中。

注

重複した名前は資産自体には影響しません。 ワークスペースブラウザからは各アセットを開いて使うことは可能です。 ファイルシステムを通じてフォルダにアクセスするコマンド、たとえばウェブターミナル、WSFS、またはGitフォルダ操作のみが影響を受けます。

重複名を持つ資産を見つけるには、以下のノートブックを実行してください。 フォルダとそのサブフォルダをスキャンし、同じ名前の資産をリストアップします。 ノートブックは読み取り専用で、アセットの名前を変更したり削除したりしません。

重複したワークスペースアセットを探す

ノートブックを入手

ワークスペースUIを使って重複名を解決するには:

  1. ワークスペースブラウザでノートブックで指定された各フォルダを開きます。
  2. フォルダ内のすべてのアセットがユニークな名前になるまで、重複するアセットの名前を変更または削除してください。

フォルダ内のすべてのアセット名が一意になると、ファイルベースのアクセスが再び機能します。