Trabalhar com módulos Python e R
Este artigo descreve como o senhor pode usar caminhos relativos para importar módulos personalizados do Python e do R armazenados em arquivos workspace juntamente com o Notebook Databricks. workspace podem facilitar ciclos de vida de desenvolvimento mais rígidos, permitindo modularizar o código, converter %run comando em instruções de importação e refatorar arquivos Python wheel em módulos co-versionados. O senhor também pode usar o terminal web integrado Databricks para testar seu código.
Observação
No Databricks Runtime 14.0 e acima, o diretório de trabalho atual (CWD) default para o código executado localmente é o diretório que contém o Notebook ou script que está sendo executado. Esta é uma mudança de comportamento do Databricks Runtime 13.3 LTS e abaixo. Consulte Qual é o diretório de trabalho atual default ?.
Importar módulos Python e R
Importante
Em Databricks Runtime 13.3 LTS e acima, os diretórios adicionados ao Python sys.path
, ou os diretórios que são estruturados como Python pacote, são automaticamente distribuídos para todos os executores no cluster. Em Databricks Runtime 12.2 LTS e abaixo, a biblioteca adicionada ao sys.path
deve ser explicitamente instalada no executor.
Em Databricks Runtime 11.3 LTS e acima, o diretório de trabalho atual do seu Notebook é automaticamente adicionado ao caminho Python. Se o senhor estiver usando as pastas Git, o diretório raiz repo será adicionado.
Para importar módulos de outro diretório, você deve adicionar o diretório que contém o módulo a sys.path
. Você pode especificar diretórios usando um caminho relativo, como no exemplo a seguir:
import sys
import os
sys.path.append(os.path.abspath('..'))
Você importa funções de um módulo armazenado em arquivos workspace da mesma forma que faria de um módulo salvo como uma biblioteca clusters ou biblioteca com escopo Notebook :
from sample import power
power.powerOfTwo(3)
source("sample.R")
power.powerOfTwo(3)
Importante
Quando o senhor usa um comando import
e existem várias bibliotecas com o mesmo nome, o site Databricks usa regras de precedência para determinar qual biblioteca deve ser carregada. Consulte Precedência da biblioteca Python.
Recarregamento automático para módulos Python
Se estiver editando vários arquivos durante o desenvolvimento do código Python, o senhor pode ativar a extensão autoreload
para recarregar automaticamente todos os módulos importados, de modo que o comando execução capture essas edições. Use o seguinte comando em qualquer célula do Notebook ou arquivo Python para ativar a extensão autoreload
:
%load_ext autoreload
%autoreload 2
A extensão autoreload
funciona apenas no processo do driver do Spark e não recarrega o código nos processos do executor do Spark. Como funciona somente no nó do driver Spark e não nos nós que executam o Spark executor, o senhor não deve usar autoreload
ao desenvolver módulos que são executados nos nós worker (por exemplo, UDFs).
Em Databricks Runtime 16.0 e acima, a extensão autoreload
em Databricks adiciona o seguinte recurso:
Suporte para recarregamento direcionado de módulos para modificações internas às funções. Recarregar apenas a parte alterada de um módulo sempre que possível garante que haja apenas uma instância visível externamente de cada objeto, o que é mais seguro e confiável.
Quando o senhor importa um módulo Python de um arquivo workspace, o Databricks sugere automaticamente o uso de
autoreload
se o módulo tiver sido alterado desde sua última importação.
Para saber mais sobre a extensão autoreload
, consulte a documentação de recarregamento automático do IPython.
Refatorar código
Uma prática recomendada para o desenvolvimento de código é modularizar o código para que possa ser facilmente reutilizado. Você pode criar arquivos Python personalizados com arquivos workspace e disponibilizar o código nesses arquivos para um Notebook usando a instrução import
.
Para refatorar o código Notebook em arquivos reutilizáveis:
Crie um novo arquivo de código-fonte para o seu código.
Adicione instruções de importação do Python ao Notebook para disponibilizar o código em seu novo arquivo para o Notebook.
Migrar de comandos %run
Se estiver usando %run
comando para tornar Python ou funções R definidas em um Notebook disponíveis para outro Notebook, ou se estiver instalando arquivos .whl
personalizados em um cluster, considere incluir esses módulos personalizados como arquivos workspace. Dessa forma, o senhor pode manter o Notebook e outros módulos de código em sincronia, garantindo que o Notebook sempre use a versão correta.
%run
comando permite que o senhor inclua um Notebook em outro e é frequentemente usado para disponibilizar o código de suporte Python ou R para um Notebook. Neste exemplo, um Notebook chamado power.py
inclui o código abaixo.
# This code is in a notebook named "power.py".
def n_to_mth(n,m):
print(n, "to the", m, "th power is", n**m)
Você pode então tornar as funções definidas em power.py
disponíveis para um Notebook diferente com um comando %run
:
# This notebook uses a %run command to access the code in "power.py".
%run ./power
n_to_mth(3, 4)
Usando arquivos workspace , você pode importar diretamente o módulo que contém o código Python e executar a função.
from power import n_to_mth
n_to_mth(3, 4)
Refatorar arquivos Python .whl
para bibliotecas relativas
O senhor pode instalar arquivos .whl
personalizados em um cluster e depois importá-los para um Notebook anexado a esse cluster. No entanto, esse processo pode ser complicado e propenso a erros para códigos atualizados com frequência. permitem que o senhor mantenha esses arquivos Python no mesmo diretório que o Notebook que usa o código, garantindo que o Notebook sempre use a versão correta.
Para obter mais informações sobre como empacotar projetos Python, consulte este tutorial.
Use o terminal da Web do Databricks para teste
O senhor pode usar o terminal da Web Databricks para testar modificações no seu código Python ou R sem usar um Notebook para importar e executar o arquivo.
Abra o terminal web.
Mude para o diretório:
cd /Workspace/Users/<path-to-directory>/
.execução do arquivo Python ou R:
python file_name.py
ouRscript file_name.r
.