デフォルトの現在の作業ディレクトリは何ですか?
この記事では、デフォルトの現在の作業ディレクトリ (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 は管理者設定とクラスター DBR バージョンによって異なります。enableWorkspaceFilesystem
がdbr8.4+
またはtrue
に設定されているワークスペースの場合、DBR バージョン 8.4 以降では、CWD は実行中のノートブックまたはスクリプトを含むディレクトリです。DBR バージョン 8.4 より前のバージョンでは、ドライバーにアタッチされたエフェメラル ストレージ ボリュームですenableWorkspaceFilesystem
がdbr11.0+
に設定されているワークスペースの場合、DBR バージョン 11.0 以降では、CWD は実行中のノートブックまたはスクリプトを含むディレクトリです。11.0 より前の DBR バージョンでは、ドライバーにアタッチされたエフェメラル ストレージ ボリュームですenableWorkspaceFilesystem
がfalse
に設定されているワークスペースの場合、CWD はドライバーにアタッチされたエフェメラル ストレージ ボリュームです
コードでCWDを取得する
パイプライン ノートブックのワークスペース CWD を取得するには、 os.getcwd()
を呼び出します。 ノートブックの先頭にある os
モジュール (デフォルトの Python ファイルシステム対話モジュール) を import os
でインポートする必要があります。 例えば:
import os
...
cwd = os.getcwd()
CWD を設定するには、パイプライン ノートブックの先頭で os.chdir('/path/to/dir')
を呼び出すこともできます。 CWD を設定できるのは、WSFS が有効になっているワークスペースからノートブックを実行しているときだけです。
これはワークロードにどのような影響を与えますか?
ワークロードに最も大きな影響を与えるのは、ファイルの永続性と場所に関係しています。
- Databricks Runtime 13.3 LTS 以前では、
/Workspace/Repos
の外部パスで実行されるコードの場合、多くのコード スニペットは、クラスターの終了時に完全に削除されるエフェメラル ストレージ ボリューム上の既定の場所にデータを格納します。 - Databricks Runtime 14.0 以降では、これらの操作のデフォルト動作により、実行中のノートブックと共に格納されたワークスペース ファイルが作成され、明示的に削除されるまで保持されます。
パフォーマンスの違いやワークスペース ファイルに固有のその他の制限については、「 ワークスペース ファイルの操作」を参照してください。
従来の動作に戻す
ノートブックの現在の作業ディレクトリは、Python のメソッド os.chdir()
を使用して変更できます。 各ノートブックがドライバーにアタッチされたエフェメラル ストレージ ボリュームで CWD を使用するようにする場合は、各ノートブックの最初のセルに次のコマンドを追加し、他のコードの前に実行できます。
import os
os.chdir("/tmp")