Saltar al contenido
Lakehouse LabLakehouse LabPreparación Databricks Data Engineer
Módulo 03 · Associate

Desarrollo

Contenido abierto

Puedes leer todo sin registrarte. Solo crearemos un perfil anónimo cuando decidas guardar tu progreso.

Associate

Notebooks, SQL, Python y PySpark en el workspace

Trabaja con notebooks y archivos como código mantenible, reproducible y parametrizable.

Lectura pública
Al terminar podrás
  • Distinguir SQL, Python y PySpark por carga
  • Gestionar parámetros y dependencias
  • Evitar estado oculto en notebooks
Ver fuentes y revisión

Metadatos editoriales

Última revisión
21 jul 2026
Nivel
Associate
Ruta relacionada
core
Dominios blueprint
Workspace · PySpark
Estado
Revisión editorial interna
Fuentes principales
Databricks notebooks · Databricks Connect
Reportar un error
01
Modelo mental

Notebooks y archivos de workspace

Un notebook es útil para desarrollo interactivo cuando sus dependencias, parámetros y orden de ejecución son explícitos.

Objetivo
Un notebook es útil para desarrollo interactivo cuando sus dependencias, parámetros y orden de ejecución son explícitos.
Duración estimada
17 min aprox.
Dificultad
Associate
Prerrequisitos
m02
Reportar un error en esta lección

Las celdas admiten SQL, Python y visualizaciones, pero el estado del proceso permite ejecutar fuera de orden. Para que otra persona reproduzca el resultado, la ejecución desde cero debe crear las mismas variables, tablas temporales y salidas.

Los archivos de workspace y módulos Python facilitan separar lógica reutilizable del relato exploratorio. Un notebook de entrada debería coordinar funciones comprobables, no concentrar transformaciones y efectos secundarios en decenas de celdas.

Modelo mental

Un notebook es simultáneamente documento, cliente de ejecución y estado interactivo. Esa combinación acelera el aprendizaje, pero dificulta reproducibilidad cuando las celdas se ejecutan fuera de orden o dependen de variables, tablas temporales y librerías instaladas manualmente. El modelo autosuficiente separa narración de lógica: el notebook recibe parámetros, invoca funciones importables, muestra evidencia pequeña y termina con salidas gobernadas. Debe poder ejecutarse desde un estado limpio de principio a fin. Los archivos de workspace y paquetes Python guardan lógica comprobable; Jobs aporta el contrato productivo. La pregunta clave no es si una celda funcionó una vez, sino qué dependencias explican exactamente su resultado.

Estado de sesión

Variables, imports, vistas temporales y cachés que sobreviven entre comandos de una sesión activa.

Es la causa principal de notebooks que funcionan solo para su autor.
Efecto secundario

Cambio observable fuera del valor devuelto, como escribir una tabla o modificar configuración.

Debe aislarse para que reintentos y pruebas sean predecibles.
Reproducibilidad

Capacidad de obtener la misma salida desde entradas, código, parámetros y dependencias declarados.

Es el criterio que permite promover un notebook a operación confiable.
PythonNotebook como punto de entrada
from commerce.transforms import clean_orders

source = spark.table("main.bronze.orders")
result = clean_orders(source)
display(result.limit(20))

clean_orders puede probarse fuera del notebook con DataFrames pequeños.

Puntos clave

  • Ejecutar desde cero revela estado oculto
  • La lógica reusable pertenece a módulos
  • La salida debe depender de parámetros explícitos

Evita

  • Depender de una celda ejecutada horas antes
  • Instalar librerías manualmente sin fijar versión

Recuerdo activo

¿Qué prueba rápida detecta estado oculto?

Borrador privado · solo en este navegador
02
Implementación

SQL frente a PySpark

SQL expresa transformaciones relacionales con claridad; PySpark facilita composición, control y pruebas en proyectos Python.

Objetivo
SQL expresa transformaciones relacionales con claridad; PySpark facilita composición, control y pruebas en proyectos Python.
Duración estimada
17 min aprox.
Dificultad
Associate
Prerrequisitos
m02
Reportar un error en esta lección

SQL resulta conciso para selección, agregación, joins y DDL/DML. PySpark usa el mismo optimizador para operaciones DataFrame y permite construir funciones, iterar sobre metadatos o integrar librerías Python.

La elección no debe basarse en una supuesta diferencia universal de rendimiento: muchas expresiones convergen en planes equivalentes. Conviene priorizar mantenibilidad, conocimientos del equipo y necesidad de abstracción, usando funciones nativas antes que UDF Python.

Modelo mental

SQL y PySpark expresan planes sobre el mismo motor, pero ofrecen distintas herramientas cognitivas. SQL describe relaciones y resultados mediante álgebra declarativa; suele ser la forma más legible para filtros, joins, agregaciones y modelos que revisan perfiles diversos. PySpark compone la API DataFrame desde Python y facilita abstracciones, control, reutilización y pruebas. No hay premio por traducir cada consulta de una forma a otra. Primero se representa la transformación con funciones nativas que Catalyst pueda analizar; después se elige el lenguaje que hace visible la intención y reduce complejidad accidental. Una UDF Python es una frontera de optimización y debe justificarse, no un atajo habitual.

Plan lógico

Representación declarativa de operaciones sobre relaciones antes de escoger algoritmos físicos.

Permite entender que SQL y DataFrames pueden converger en la misma ejecución.
Función nativa

Expresión conocida por Spark y visible para análisis, optimización y generación de código.

Suele conservar mejor rendimiento y diagnósticos que una UDF opaca.
UDF Python

Función definida por el usuario ejecutada en la frontera entre JVM y proceso Python.

Puede ser necesaria, pero introduce costes y limita optimizaciones si reemplaza funciones incorporadas.
PySparkTransformación nativa equivalente a SQL
from pyspark.sql import functions as F

daily = (orders
    .filter(F.col("status") == "paid")
    .groupBy("order_date")
    .agg(F.sum("amount").alias("revenue")))

Compara daily.explain('formatted') con la consulta SQL equivalente.

Puntos clave

  • SQL y DataFrame API comparten optimizador
  • PySpark facilita modularidad Python
  • Las funciones nativas suelen superar a UDF Python

Evita

  • Convertir a pandas para una transformación distribuida
  • Crear una UDF para una función ya disponible en Spark SQL

Recuerdo activo

¿SQL es siempre más rápido que PySpark DataFrames?

Borrador privado · solo en este navegador
03
Operación

Widgets y parámetros de tareas

Los parámetros de Job y widgets convierten una ejecución en un contrato reproducible, no en una colección de valores editados a mano.

Objetivo
Los parámetros de Job y widgets convierten una ejecución en un contrato reproducible, no en una colección de valores editados a mano.
Duración estimada
17 min aprox.
Dificultad
Associate
Prerrequisitos
m02
Reportar un error en esta lección

Un widget recibe valores de texto en un notebook y puede ser alimentado por parámetros de tarea. Conviene validar formato, rango y valores permitidos al comienzo para fallar antes de modificar datos.

Los parámetros deben representar variación de ejecución, como fecha o catálogo objetivo; secretos y credenciales no deben viajar como texto. Para compartir valores pequeños entre tareas se usan task values, mientras que datasets se publican en almacenamiento gobernado.

Modelo mental

Un parámetro es parte del contrato de una ejecución: tiene nombre, origen, tipo esperado, valor permitido y efecto. Un widget es solo una interfaz para recibir valores en un notebook; no debe convertirse en almacenamiento de configuración ni en secreto. Los parámetros de Job se resuelven para un run y pueden transmitirse a tareas compatibles. La transformación convierte cadenas recibidas en tipos de dominio y falla pronto si son inválidas. Separar parámetros de datos evita pasar grandes payloads por la orquestación: una fecha, ruta o identificador referencia entradas persistidas; la tabla o Volume contiene el dataset. Así una ejecución puede reconstruirse leyendo run, código y valores registrados.

Parámetro de Job

Valor declarado y registrado que configura una ejecución o tarea concreta.

Permite reusar código y reconstruir por qué un run procesó una entrada determinada.
Widget

Control de notebook que expone un valor textual a la sesión interactiva o parametrizada.

Es una interfaz de entrada, no un sistema de tipos ni un almacén de secretos.
Referencia dinámica

Expresión que resuelve metadatos del run o valores producidos por tareas en tiempo de ejecución.

Conecta tareas sin valores manuales y mantiene trazabilidad del contexto.
PythonParámetro de fecha validado
from datetime import date

dbutils.widgets.text("process_date", "")
raw = dbutils.widgets.get("process_date")
process_date = date.fromisoformat(raw)
if process_date > date.today():
    raise ValueError("process_date no puede ser futura")

El Job puede pasar process_date sin editar el notebook.

Puntos clave

  • Los widgets reciben strings
  • Valida parámetros antes de escribir
  • No uses task values para transportar datasets

Evita

  • Leer un widget sin validar su tipo
  • Incluir contraseñas directamente en parámetros del Job

Recuerdo activo

¿Qué tipo devuelve dbutils.widgets.get?

Borrador privado · solo en este navegador
04
Diagnóstico

Librerías y entornos reproducibles

Databricks Connect permite ejecutar y depurar código Spark desde un IDE local contra compute de Databricks.

Objetivo
Databricks Connect permite ejecutar y depurar código Spark desde un IDE local contra compute de Databricks.
Duración estimada
17 min aprox.
Dificultad
Associate
Prerrequisitos
m02
Reportar un error en esta lección

Databricks Connect implementa Spark Connect: el proceso local construye planes que se ejecutan remotamente. Esto permite usar depurador, tests e integración del IDE sin descargar el dataset completo al portátil.

La versión del cliente debe ser compatible con el runtime o serverless seleccionado y la autenticación debe configurarse mediante un perfil, OAuth u otro mecanismo soportado. Código que depende de APIs exclusivas del driver o del filesystem local puede necesitar adaptación.

Modelo mental

Databricks Connect separa la experiencia de edición local del lugar donde Spark ejecuta. El IDE mantiene código, depurador y pruebas; una sesión remota envía planes a compute de Databricks y utiliza datos gobernados allí. No es un Spark local que copie automáticamente tablas al portátil. La compatibilidad depende de la versión de Databricks Connect, runtime y capacidades soportadas; la autenticación identifica al desarrollador o principal. El modelo mental evita dos errores: asumir que el procesamiento grande ocurre localmente o creer que depurar autoriza datos adicionales. La productividad mejora cuando lógica pura se prueba localmente y las integraciones Spark se verifican contra un entorno remoto acotado.

Spark Connect

Arquitectura cliente-servidor usada para construir planes en un cliente y ejecutarlos en un backend Spark remoto.

Explica la separación entre IDE local y procesamiento de Databricks.
Compatibilidad de versión

Correspondencia soportada entre cliente Databricks Connect y runtime o compute remoto.

Evita errores de protocolo y funciones inexistentes durante desarrollo.
Prueba de integración

Comprobación que ejercita dependencias reales como Spark remoto, catálogo y almacenamiento en un entorno controlado.

Detecta problemas que una prueba puramente local no puede representar.
PythonSesión con Databricks Connect
from databricks.connect import DatabricksSession

spark = DatabricksSession.builder.profile("dev").serverless().getOrCreate()
print(spark.range(10).count())

El perfil dev se configura fuera del repositorio; serverless requiere soporte en el workspace.

Puntos clave

  • El procesamiento Spark ocurre en Databricks
  • Cliente y runtime deben ser compatibles
  • La autenticación no se incrusta en el código

Evita

  • Creer que Spark procesa los datos en el portátil
  • Guardar un personal access token en el repositorio

Recuerdo activo

¿Dónde se ejecuta spark.range(10).count() con Connect?

Borrador privado · solo en este navegador
05
Decisión de diseño

Colaboración, revisión y modularidad

Git folders, dependencias fijadas y paquetes separan colaboración, entorno y lógica de negocio.

Objetivo
Git folders, dependencias fijadas y paquetes separan colaboración, entorno y lógica de negocio.
Duración estimada
17 min aprox.
Dificultad
Associate
Prerrequisitos
m02
Reportar un error en esta lección

Un Git folder sincroniza archivos del workspace con un proveedor Git y permite ramas, commits y revisión. No sustituye un proceso de CI ni convierte automáticamente un notebook en artefacto desplegable.

Un proyecto mantenible declara dependencias en pyproject.toml, limita rangos de versión y construye un wheel cuando corresponde. Dev, test y prod deben ejecutar el mismo artefacto, cambiando configuración mediante variables y no mediante copias del código.

Modelo mental

Un proyecto productivo necesita separar tres versiones: código, dependencias e infraestructura declarada. Git folders sincroniza archivos del workspace con un repositorio y permite ramas; un lock o especificación fija bibliotecas; un paquete Python ofrece una unidad instalable e importable; un bundle describe Jobs, pipelines y targets. Copiar un notebook para dev, test y prod rompe esa identidad porque cada copia deriva. El modelo correcto promociona el mismo commit y artefacto, mientras configuración, catálogo e identidad cambian por target. Los secretos nunca forman parte del repositorio. Esta estructura hace posible revisar diferencias, reproducir un run y revertir una versión sin reconstruir manualmente el estado del workspace.

Artefacto

Salida versionada e inmutable de un proceso de construcción, como una wheel de Python.

Permite desplegar exactamente lo probado en vez de reconstruir por ambiente.
Git folder

Carpeta del workspace conectada a un repositorio Git para editar y sincronizar código.

Facilita colaboración sin convertir el workspace en fuente única de verdad.
Lock de dependencias

Registro de versiones concretas resueltas para bibliotecas directas y transitivas.

Reduce diferencias de entorno y hace repetibles pruebas y ejecuciones.
YAMLDependencias de proyecto
project:
  source: src/commerce
  tests: tests
  artifact: dist/commerce.whl
  environments: [dev, test, prod]
  secrets_in_repo: false

El bundle del módulo 11 automatizará la promoción del artefacto.

Puntos clave

  • Git registra código, no datos ni secretos
  • pyproject.toml declara dependencias
  • El mismo artefacto debe promocionarse entre entornos

Evita

  • Cometer credenciales o datos sensibles
  • Mantener una versión distinta del notebook por entorno

Recuerdo activo

¿Qué debe cambiar entre dev y prod?

Borrador privado · solo en este navegador
5 lecciones pendientes

Vista de lectura · sin ejecución

notebook-best-practices

notebook-best-practices · commit b4f55c1

notebooks/covid_eda_modular.py