Udostępnij przez


Jaki jest domyślny bieżący katalog roboczy?

W tym artykule opisano, jak działa domyślny bieżący katalog roboczy (CWD) podczas wykonywania notebooków i plików.

Uwaga

Użyj Databricks Runtime 14.0 lub nowszej oraz domyślnych konfiguracji obszaru roboczego, aby uzyskać większą spójność w zachowaniu (CWD) w całym obszarze roboczym.

Istnieją dwa domyślne zachowania CWD dla kodu wykonywanego lokalnie w notesach i plikach:

  1. Funkcja CWD zwraca katalog zawierający uruchamiany notes lub skrypt.
  2. Funkcja CWD zwraca katalog reprezentujący tymczasowy wolumin pamięci masowej dołączony do sterownika.

To zachowanie CWD ma wpływ na cały kod, w tym %sh oraz kod Pythona lub R-a, który nie korzysta z platformy Apache Spark. Zachowanie jest określane przez język kodu, wersję środowiska Databricks Runtime, ścieżkę obszaru roboczego i konfigurację administratora obszaru roboczego.

W przypadku kodu Scala CWD jest efemerycznym magazynem dołączonym do sterownika.

W przypadku kodu we wszystkich innych językach:

  • W środowisku Databricks Runtime 14.0 lub nowszym CWD jest katalogiem zawierającym uruchamiany notatnik lub skrypt. Jest to prawda niezależnie od tego, czy kod znajduje się w pliku /Workspace/Repos.
  • W przypadku notesów z uruchomionym środowiskiem Databricks Runtime 13.3 LTS i nowszym CWD zależy od tego, czy kod znajduje się w pliku /Workspace/Repos:
  • W przypadku kodu wykonywanego w ścieżce poza /Workspace/Repos, CWD jest efemerycznym woluminem magazynu dołączonym do sterownika
  • W przypadku kodu wykonywanego w ścieżce w /Workspace/Repos, CWD zależy od ustawienia konfiguracji administratora i wersji klastra Databricks Runtime.
    • W przypadku obszarów roboczych z enableWorkspaceFilesystem ustawioną wartością dbr8.4+ lub truew środowisku Databricks Runtime w wersji 8.4 lub nowszej CWD jest katalogiem zawierającym uruchamiany notes lub skrypt. W wersjach środowiska Databricks Runtime poniżej 8.4 jest to tymczasowy wolumin magazynowy dołączony do węzła zarządzającego.
    • W przypadku obszarów roboczych z enableWorkspaceFilesystem ustawioną wartością dbr11.0+w środowisku Databricks Runtime w wersji 11.0 lub nowszej CWD jest katalogiem zawierającym notes lub uruchamiany skrypt. W środowisku Databricks Runtime w wersjach poniżej 11.0 jest to efemeryczny wolumin magazynu dołączony do sterownika
    • W przypadku obszarów roboczych z enableWorkspaceFilesystem ustawioną wartością falseCWD jest efemerycznym woluminem magazynu dołączonym do sterownika

Pobierz CWD w kodzie

Aby uzyskać nazwę CWD obszaru roboczego dla notesu potoku, wywołaj metodę os.getcwd(). Musisz zaimportować moduł os (domyślny moduł interakcji systemu plików w języku Python) na początku notatnika przy użyciu import os. Na przykład:

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

Można również ustawić CWD, wywołując os.chdir('/path/to/dir') na początku notatnika potoku. Funkcję CWD można ustawić tylko podczas uruchamiania notesu z obszaru roboczego z włączonym systemem WSFS.

Jak to wpływa na obciążenia?

Największy wpływ na obciążenia ma trwałość plików i lokalizacja.

  • W środowiskach Databricks Runtime 13.3 LTS i starszych, kod wykonywany w ścieżce poza /Workspace/Repos zapisuje dane w domyślnej lokalizacji na tymczasowym woluminie pamięci, który jest trwale usuwany po zakończeniu działania klastra.
  • W Databricks Runtime 14.0 lub nowszym domyślne działanie tych operacji powoduje utworzenie plików przestrzeni roboczej, które są przechowywane obok uruchomionego notesu i pozostają trwałe do momentu ich jawnego usunięcia.

Aby uzyskać informacje na temat różnic w wydajności i innych ograniczeń związanych z plikami obszaru roboczego, zobacz Praca z plikami obszaru roboczego.

Przywróć działanie w trybie starszej wersji

Bieżący katalog roboczy dla dowolnego notesu można zmienić przy użyciu metody os.chdir()języka Python . Jeśli chcesz się upewnić, że każdy notatnik używa CWD na woluminach magazynu efemerycznego podłączonych do sterownika, możesz dodać następujące polecenie do pierwszej komórki każdego notatnika i uruchomić je przed jakimkolwiek innym kodem.

import os

os.chdir("/tmp")