Trabajo con módulos de Python y R

En este artículo, se describe cómo puede usar rutas de acceso relativas para importar módulos personalizados de Python y R almacenados en archivos del área de trabajo junto con los cuadernos de Databricks. Los archivos del área de trabajo pueden facilitar ciclos de vida de desarrollo más estrictos, lo que le permite modularizar el código, convertir comandos %run para importar instrucciones, y refactorizar archivos de rueda de Python en módulos con versiones conjuntas. También puede usar el terminal web integrado de Databricks para probar el código.

Nota:

En Databricks Runtime 14.0 y versiones posteriores, el directorio de trabajo actual predeterminado (CWD) para el código ejecutado localmente es el directorio que contiene el cuaderno o el script que se está ejecutando. Este es un cambio en el comportamiento de Databricks Runtime 13.3 LTS y versiones posteriores. Vea ¿Cuál es el directorio de trabajo actual predeterminado?.

Importación de módulos de R y Python

Importante

En Databricks Runtime 13.3 LTS y superiores, los directorios agregados a Python sys.path, o los directorios estructurados como Paquetes de Python, se distribuyen automáticamente a todos los ejecutores del clúster. En Databricks Runtime 12.2 LTS y versiones posteriores, las bibliotecas agregadas a sys.path deben instalarse explícitamente en los ejecutores.

En Databricks Runtime 11.3 LTS y versiones posteriores, el directorio de trabajo actual del cuaderno se agrega automáticamente a la ruta de acceso de Python. Si usa carpetas de Git, se agrega el directorio del repositorio raíz.

Para importar módulos de otro directorio, debe agregar el directorio que contiene el módulo a sys.path. Puede especificar directorios mediante una ruta de acceso relativa, como en el ejemplo siguiente:

import sys
import os
sys.path.append(os.path.abspath('..'))

Las funciones se importan desde un módulo almacenado en los archivos del área de trabajo de la misma forma en que lo haría desde un módulo guardado como una biblioteca de clúster o una biblioteca con ámbito de cuaderno:

Python

from sample import power
power.powerOfTwo(3)

R

source("sample.R")
power.powerOfTwo(3)

Importante

Cuando se usa una instrucción import, Databricks sigue una prioridad establecida si existen varias bibliotecas del mismo nombre. Consulte Precedencia de la biblioteca de Python.

Carga automática de módulos de Python

Si va a editar varios archivos al desarrollar código de Python, puede usar los siguientes comandos en cualquier celda del cuaderno o archivo de Python para forzar una recarga de todos los módulos:

%load_ext autoreload
%autoreload 2

Tenga en cuenta que la recarga automática solo funciona en el controlador y no vuelve a cargar código en el ejecutor para las UDF.

Refactorizar código

Un procedimiento recomendado para el desarrollo de código es modularizar el código para que se pueda reutilizar fácilmente. Puede crear archivos de Python personalizados con archivos del área de trabajo y hacer que el código de esos archivos esté disponible para un cuaderno mediante la instrucción import.

Para refactorizar el código del cuaderno en archivos reutilizables:

  1. Cree un nuevo archivo de código fuente para el código.
  2. Agregue instrucciones de importación de Python al cuaderno para que el código del nuevo archivo esté disponible para el cuaderno.

Migración desde comandos %run

Si usa comandos %run para que las funciones de Python o R definidas en un cuaderno estén disponibles para otro cuaderno, o si está instalando archivos .whl personalizados en un clúster, considere la posibilidad de incluir esos módulos personalizados en un repositorio de Databricks. De esta manera, puede mantener sincronizados los cuadernos y otros módulos de código, lo que garantiza que el cuaderno siempre use la versión correcta.

Los comandos %run permiten incluir un cuaderno dentro de otro y a menudo se usan para que el código de Python o R compatible esté disponible para un cuaderno. En este ejemplo, un cuaderno denominado power.py incluye el código siguiente.

# 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)

A continuación, puede hacer que las funciones definidas en power.py estén disponibles para un cuaderno diferente con un comando %run:

# This notebook uses a %run command to access the code in "power.py".
%run ./power
n_to_mth(3, 4)

Con los archivos del área de trabajo en Repos, puede importar directamente el módulo que contiene el código de Python y ejecutar la función.

from power import n_to_mth
n_to_mth(3, 4)

Refactorización de archivos .whl de Python en bibliotecas relativas

Puede instalar archivos .whl personalizados en un clúster y luego importarlos en un cuaderno asociado a ese clúster. Para el código que se actualiza con frecuencia, este proceso puede resultar engorroso y propenso a errores. Archivos de espacio de trabajo le permite mantener estos archivos Python en el mismo directorio con los cuadernos que utilizan el código, asegurando que su cuaderno siempre utiliza la versión correcta.

Para más información sobre el empaquetado de proyectos de Python, consulte este tutorial.

Uso del terminal web de Azure Databricks para pruebas

Puede usar el terminal web de Azure Databricks para probar las modificaciones realizadas en el código de Python o R sin tener que importar el archivo en un cuaderno y ejecutar el cuaderno.

  1. Abra el terminal web.
  2. Cambiar al directorio: cd /Workspace/Users/<path-to-directory>/.
  3. Ejecute el archivo de Python o R: python file_name.py o Rscript file_name.r.