Qual è la directory di lavoro corrente predefinita?
Questo articolo descrive il funzionamento della directory di lavoro corrente predefinita (CWD) per l'esecuzione di notebook e file.
Nota
Usare Databricks Runtime 14.0+ e le configurazioni predefinite dell'area di lavoro per una maggiore coerenza nel comportamento (CWD) in tutta l'area di lavoro.
Esistono due comportamenti CWD predefiniti per il codice eseguito localmente nei notebook e nei file:
- CWD restituisce la directory contenente il notebook o lo script in esecuzione.
- CWD restituisce una directory che rappresenta il volume di archiviazione temporaneo collegato al driver.
Questo comportamento CWD influisce su tutto il codice, incluso %sh
e il codice Python o R che non usa Apache Spark. Il comportamento è determinato dal linguaggio di codice, dalla versione di Databricks Runtime, dal percorso dell'area di lavoro e dalla configurazione dell'amministratore dell'area di lavoro.
Per il codice Scala, CWD è l'archivio temporaneo collegato al driver.
Per il codice in tutti gli altri linguaggi:
- In Databricks Runtime 14.0 e versioni successive, CWD è la directory contenente il notebook o lo script in esecuzione. Questo vale indipendentemente dal fatto che il codice si trova in
/Workspace/Repos
. - Per i notebook che eseguono Databricks Runtime 13.3 LTS e versioni successive, CWD dipende dal fatto che il codice sia in
/Workspace/Repos
: - Per il codice eseguito in un percorso esterno a
/Workspace/Repos
, CWD è il volume di archiviazione temporaneo collegato al driver - Per il codice eseguito in un percorso in
/Workspace/Repos
, CWD dipende dall'impostazione di configurazione dell'amministratore e dalla versione DBR del cluster:- Per le aree di lavoro con
enableWorkspaceFilesystem
impostato sudbr8.4+
otrue
, nelle versioni DBR 8.4 e successive, CWD è la directory contenente il notebook o lo script in esecuzione. Nelle versioni DBR precedenti alla 8.4 è il volume di archiviazione temporaneo collegato al driver - Per le aree di lavoro con
enableWorkspaceFilesystem
impostato sudbr11.0+
, nelle versioni DBR 11.0 e successive, CWD è la directory contenente il notebook o lo script in esecuzione. Nelle versioni DBR precedenti alla 11.0 è il volume di archiviazione temporaneo collegato al driver - Per le aree di lavoro con
enableWorkspaceFilesystem
impostato sufalse
, CWD è il volume di archiviazione temporaneo collegato al driver
- Per le aree di lavoro con
Ottenere CWD nel codice
Per ottenere l'area di lavoro CWD per il notebook della pipeline, chiamare os.getcwd()
. È necessario importare il os
modulo (modulo di interazione del file system Python predefinito) all'inizio del notebook con import os
. Ad esempio:
import os
...
cwd = os.getcwd()
È anche possibile impostare CWD chiamando os.chdir('/path/to/dir')
all'inizio del notebook della pipeline. È possibile impostare CWD solo quando si esegue un notebook dall'area di lavoro con WSFS abilitato.
In che modo questo influisce sui carichi di lavoro?
L'impatto maggiore sui carichi di lavoro è dovuto alla persistenza e alla posizione dei file:
- In Databricks Runtime 13.3 LTS e versioni successive, per il codice eseguito in un percorso esterno a , molti frammenti di
/Workspace/Repos
codice archiviano i dati in una posizione predefinita in un volume di archiviazione temporaneo eliminato definitivamente quando il cluster viene terminato. - In Databricks Runtime 14.0 e versioni successive, il comportamento predefinito per queste operazioni crea file dell'area di lavoro archiviati insieme al notebook in esecuzione che persiste fino a quando non viene eliminato in modo esplicito.
Per note sulle differenze di prestazioni e altre limitazioni intrinseche nei file dell'area di lavoro, vedere Usare i file dell'area di lavoro.
Ripristinare il comportamento legacy
È possibile modificare la directory di lavoro corrente per qualsiasi notebook usando il metodo os.chdir()
Python . Se si vuole assicurarsi che ogni notebook usi un CWD nei volumi di archiviazione temporanei collegati al driver, è possibile aggiungere il comando seguente alla prima cella di ogni notebook ed eseguirlo prima di qualsiasi altro codice:
import os
os.chdir("/tmp")