Partilhar via


Qual é o diretório de trabalho atual padrão?

Este artigo descreve como o diretório de trabalho atual padrão (CWD) funciona para execução de bloco de anotações e arquivos.

Nota

Use o Databricks Runtime 14.0+ e as configurações padrão do espaço de trabalho para obter mais consistência no comportamento (CWD) em todo o espaço de trabalho.

Há dois comportamentos CWD padrão para código executado localmente em blocos de anotações e arquivos:

  1. CWD retorna o diretório que contém o bloco de anotações ou script que está sendo executado.
  2. CWD retorna um diretório que representa o volume de armazenamento efêmero anexado ao driver.

Esse comportamento CWD afeta todo o código, incluindo %sh o código Python ou R que não usa o Apache Spark. O comportamento é determinado pela linguagem de código, versão do Databricks Runtime, caminho do espaço de trabalho e configuração do administrador do espaço de trabalho.

Para o código Scala, o CWD é o armazenamento efêmero anexado ao driver.

Para código em todos os outros idiomas:

  • No Databricks Runtime 14.0 e superior, o CWD é o diretório que contém o bloco de anotações ou script que está sendo executado. Isso é verdade independentemente de o código estar em /Workspace/Repos.
  • Para notebooks que executam o Databricks Runtime 13.3 LTS e inferior, o CWD depende se o código está em /Workspace/Repos:
  • Para código executado em um caminho fora do /Workspace/Repos, o CWD é o volume de armazenamento efêmero anexado ao driver
  • Para o código executado em um caminho no /Workspace/Repos, o CWD depende da configuração do administrador e da versão do DBR do cluster:
    • Para espaços de trabalho com enableWorkspaceFilesystem definido como dbr8.4+ ou true, nas versões DBR 8.4 e superiores, o CWD é o diretório que contém o bloco de anotações ou script que está sendo executado. Nas versões DBR abaixo de 8.4, é o volume de armazenamento efêmero conectado ao driver
    • Para espaços de trabalho com enableWorkspaceFilesystem definido como dbr11.0+, nas versões DBR 11.0 e superiores, o CWD é o diretório que contém o bloco de anotações ou script que está sendo executado. Nas versões DBR abaixo de 11.0, é o volume de armazenamento efêmero conectado ao driver
    • Para espaços de trabalho com enableWorkspaceFilesystem definido como false, o CWD é o volume de armazenamento efêmero conectado ao driver

Obtenha o CWD no seu código

Para obter o CWD do espaço de trabalho para seu bloco de anotações de pipeline, ligue os.getcwd()para . Você deve importar o os módulo (o módulo de interação do sistema de arquivos Python padrão) no início do seu bloco de anotações com import oso . Por exemplo:

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

Você também pode definir o CWD chamando os.chdir('/path/to/dir') no início do seu bloco de anotações de pipeline. Você só pode definir o CWD quando estiver executando um bloco de anotações do seu espaço de trabalho com o WSFS habilitado.

Como isso afeta as cargas de trabalho?

Os maiores impactos nas cargas de trabalho têm a ver com a persistência e a localização dos arquivos:

  • No Databricks Runtime 13.3 LTS e inferior, para código executado em um caminho fora do , muitos trechos de /Workspace/Reposcódigo armazenam dados em um local padrão em um volume de armazenamento efêmero que é excluído permanentemente quando o cluster é encerrado.
  • No Databricks Runtime 14.0 e superior, o comportamento padrão para essas operações cria arquivos de espaço de trabalho armazenados ao lado do bloco de anotações em execução que persistem até serem explicitamente excluídos.

Para obter notas sobre diferenças de desempenho e outras limitações inerentes aos arquivos de espaço de trabalho, consulte Trabalhar com arquivos de espaço de trabalho.

Reverter para o comportamento herdado

Você pode alterar o diretório de trabalho atual para qualquer bloco de anotações usando o método os.chdir()Python . Se você quiser garantir que cada notebook use um CWD nos volumes de armazenamento efêmeros conectados ao driver, você pode adicionar o seguinte comando à primeira célula de cada notebook e executá-lo antes de qualquer outro código:

import os

os.chdir("/tmp")