Condividi tramite


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:

  1. CWD restituisce la directory contenente il notebook o lo script in esecuzione.
  2. 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 su dbr8.4+ o true, 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 su dbr11.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 su false, CWD è il volume di archiviazione temporaneo collegato al driver

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/Reposcodice 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")