Compartir a través de


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 import instrucción y existen varias bibliotecas del mismo nombre, Databricks usa reglas de precedencia para determinar qué biblioteca se va a cargar. Consulte Precedencia de la biblioteca de Python.

Carga automática de módulos de Python

Si está editando varios archivos durante el desarrollo de código de Python, puede habilitar la autoreload extensión para volver a cargar automáticamente los módulos importados para que el comando ejecute la selección de esas modificaciones. Use los siguientes comandos en cualquier celda del cuaderno o archivo de Python para habilitar la autoreload extensión:

%load_ext autoreload
%autoreload 2

La autoreload extensión solo funciona en el proceso del controlador de Spark y no vuelve a cargar código en los procesos del ejecutor de Spark. Dado que solo funciona en el nodo del controlador de Spark y no en los nodos que ejecutan el ejecutor de Spark, no debe usar autoreload al desarrollar módulos que se ejecutan en nodos de trabajo (por ejemplo, UDF).

En Databricks Runtime 16.0 y versiones posteriores, la autoreload extensión de Databricks agrega las siguientes características:

  • Compatibilidad con la recarga dirigida de módulos para modificaciones internas en las funciones. Volver a cargar solo la parte modificada de un módulo siempre que sea posible garantiza que solo haya una instancia visible externamente de cada objeto, que es más segura y confiable.
  • Al importar un módulo de Python desde un archivo de área de trabajo, Databricks sugiere automáticamente el uso autoreload de si el módulo ha cambiado desde su última importación.

Para más información sobre la autoreload extensión, consulte la documentación de IPython autoreload.

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 este modo, puede mantener sincronizados los cuadernos y otros módulos de código, lo que garantiza que el cuaderno siempre use la versión correcta.

%run los comandos permiten incluir un cuaderno en otro y a menudo se usan para que el código de Python o R sea compatible con 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. Sin embargo, este proceso puede ser complicado y propenso a errores para el código actualizado con frecuencia. Los archivos del área de trabajo permiten mantener estos archivos de Python en el mismo directorio que los cuadernos que usan el código, lo que garantiza que el cuaderno siempre usa 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 en el código de Python o R sin usar un cuaderno para importar y ejecutar el archivo.

  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.