分享方式:


預設目前的工作目錄為何?

本文說明預設目前工作目錄 (CWD) 如何用於筆記本和檔案執行。

注意

使用 Databricks Runtime 14.0+ 和預設工作區組態,在整個工作區中更一致性的行為。

在筆記本檔案中本機執行的程式代碼有兩個預設的 CWD 行為:

  1. CWD 會傳回包含所執行筆記本或腳本的目錄。
  2. CWD 會傳回目錄,代表附加至驅動程式的暫時記憶體磁碟區。

此 CWD 行為會影響所有程式碼,包括 %sh 和不使用 Apache Spark 的 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 版和更新版本上設定為 dbr8.4+true的工作區enableWorkspaceFilesystem,CWD 是包含執行筆記本或腳本的目錄。 在低於 8.4 的 DBR 版本上,它是連結至驅動程式的暫時記憶體磁碟區
    • 對於設定為 dbr11.0+的工作區enableWorkspaceFilesystem,在 DBR 11.0 版和更新版本上,CWD 是包含執行筆記本或腳本的目錄。 在低於 11.0 的 DBR 版本上,它是連結至驅動程式的暫時記憶體磁碟區
    • 對於設定為falseenableWorkspaceFilesystem工作區,CWD 是連結至驅動程式的暫時記憶體磁碟區

在您的程式代碼中取得 CWD

若要取得管線筆記本的工作區 CWD,請呼叫 os.getcwd()。 您必須在 os 筆記本 import os開頭使用 匯入模組(預設的 Python 檔案系統互動模組)。 例如:

import os
...
cwd = os.getcwd()

您也可以在管線筆記本開頭呼叫 os.chdir('/path/to/dir') 來設定 CWD。 您只能在從已啟用 WSFS 的工作區執行筆記本時設定 CWD。

這如何影響工作負載?

對工作負載的影響最大,與檔案保存和位置相關:

  • 在 Databricks Runtime 13.3 LTS 和以下的 Databricks Runtime 13.3 LTS 中,針對在 外部 /Workspace/Repos路徑中執行的程式代碼,許多代碼段會將數據儲存到暫時儲存磁碟區上的預設位置,而暫時儲存磁碟區會在叢集終止時永久刪除。
  • 在 Databricks Runtime 14.0 和更新版本中,這些作業的預設行為會建立與執行中筆記本一起儲存的工作區檔案,這些檔案會持續到明確刪除為止。

如需工作區檔案中效能差異和其他固有限制的注意事項,請參閱 使用工作區檔案

還原為舊版行為

您可以使用 Python 方法 os.chdir()變更任何筆記本的目前工作目錄。 如果您想要確保每個筆記本在附加至驅動程式的暫時儲存磁碟區上使用 CWD,您可以將下列命令新增至每個筆記本的第一個數據格,並在任何其他程式碼之前執行:

import os

os.chdir("/tmp")