この記事では、ノートブックとファイルの実行に対して既定の現在の作業ディレクトリ (CWD) がどのように機能するかについて説明します。
注
Databricks Runtime 14.0 以降と既定のワークスペース構成を使用すると、ワークスペース全体の (CWD) 動作の一貫性を高めることができます。
ノートブックとファイルでローカルに実行されるコードには、次の 2 つの既定の CWD 動作があります。
- CWD により、実行中のノートブックまたはスクリプトを含むディレクトリが返されます。
- CWD は、ドライバーに接続されているエフェメラル ストレージ ボリュームを表すディレクトリが返されます。
この CWD 動作は、Apache Spark を使用しない %sh および Python または R コードを含むすべてのコードに影響します。 動作は、コード言語、Databricks Runtime バージョン、ワークスペース パス、ワークスペース管理者の構成によって決まります。
Scala コードの場合、CWD はドライバーに接続されているエフェメラル ストレージです。
他のすべての言語のコードの場合:
- Databricks Runtime 14.0 以降では、CWD は実行されているノートブックまたはスクリプトを含むディレクトリです。 これは、コードが
/Workspace/Reposに含まれているかどうかに関係なく該当します。 - Databricks Runtime 13.3 LTS 以下を実行しているノートブックの場合、CWD はコードが
/Workspace/Reposにあるかどうかによって異なります。 -
/Workspace/Repos外部のパスで実行されるコードの場合、CWD はドライバーに接続されているエフェメラル ストレージ ボリュームです -
/Workspace/Reposのパスで実行されるコードの場合、CWD は管理者の構成設定とクラスター Databricks Runtime のバージョンによって異なります。-
enableWorkspaceFilesystemがdbr8.4+またはtrueに設定されているワークスペースの場合、Databricks Runtime バージョン 8.4 以降では、CWD は実行されているノートブックまたはスクリプトを含むディレクトリです。 8.4 より前の Databricks ランタイム バージョンでは、ドライバーに接続されている一時的なストレージ ボリュームです -
enableWorkspaceFilesystemがdbr11.0+に設定されているワークスペースの場合、Databricks Runtime バージョン 11.0 以降では、CWD は実行されているノートブックまたはスクリプトを含むディレクトリです。 Databricks Runtime バージョンが 11.0 より前の場合、ドライバーに接続されている一時ストレージ ボリュームです -
enableWorkspaceFilesystemがfalseに設定されているワークスペースの場合、CWD はドライバーに接続されているエフェメラル ストレージ ボリュームです
-
コードで CWD を取得する
パイプライン ノートブックのワークスペース CWD を取得するには、 os.getcwd()を呼び出します。
osを使用して、ノートブックの先頭にある import os モジュール (既定の Python ファイル システム対話モジュール) をインポートする必要があります。 次に例を示します。
import os
...
cwd = os.getcwd()
パイプライン ノートブックの先頭で os.chdir('/path/to/dir') を呼び出して CWD を設定することもできます。 CWD は、WSFS が有効になっているワークスペースからノートブックを実行している場合にのみ設定できます。
これはワークロードにどのように影響しますか?
ワークロードへの最大の影響は、ファイルの永続性と場所に関係します。
- Databricks Runtime 13.3 LTS 以下の場合、
/Workspace/Reposの外部のパスで実行されるコードは、多くのコード スニペットで、クラスターの終了時に完全に削除されるエフェメラル ストレージ ボリューム上の既定の位置にデータが格納されます。 - Databricks Runtime 14.0 以降では、これらの操作のデフォルトの動作により、明示的に削除されるまで保持される実行中のノートブックと共に保存されたワークスペース ファイルが作成されます。
ワークスペース ファイル固有のパフォーマンスの違いと他の制限事項に関する注意については、「ワークスペース ファイルを操作する」を参照してください。
レガシ動作に戻す
Python メソッド os.chdir() を使用して、任意のノートブックの現在の作業ディレクトリを変更できます。 ドライバーに接続されたエフェメラル ストレージ ボリューム上で各ノートブックが CWD を使用するようにしたい場合は、各ノートブックの最初のセルに以下のコマンドを追加し、他のコードの前に実行します。
import os
os.chdir("/tmp")