既定の現在の作業ディレクトリとは?
この記事では、ノートブックとファイルの実行に対して既定の現在の作業ディレクトリ (CWD) がどのように機能するかについて説明します。
Note
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 は管理者の構成設定とクラスター DBR のバージョンによって異なります。- DBR バージョン 8.4 以降の、
enableWorkspaceFilesystem
がdbr8.4+
またはtrue
に設定されているワークスペースの場合、CWD は実行されているノートブックまたはスクリプトを含むディレクトリです。 8.4 より前のバージョンの DBR では、ドライバーに接続されているエフェメラル ストレージ ボリュームです - DBR バージョン 11.0 以降で、
enableWorkspaceFilesystem
がdbr11.0+
に設定されているワークスペースの場合、CWD は実行されているノートブックまたはスクリプトを含むディレクトリです。 11.0 より前のバージョンの DBR の場合は、ドライバーに接続されているエフェメラル ストレージ ボリュームです enableWorkspaceFilesystem
がfalse
に設定されているワークスペースの場合、CWD はドライバーに接続されているエフェメラル ストレージ ボリュームです
- DBR バージョン 8.4 以降の、
コードで CWD を取得する
パイプライン ノートブックのワークスペース CWD を取得するには、 os.getcwd()
を呼び出します。 import os
を使用して、ノートブックの先頭にある 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")