Saltar a contenido

Lazy Evaluation

Banner del Curso

Introducci贸n

Uno de los aspectos m谩s poderosos (y menos intuitivos al principio) de PySpark es su modelo de evaluaci贸n diferida, conocido como lazy evaluation. A diferencia de otras librer铆as como Pandas, donde cada operaci贸n se ejecuta de inmediato, en PySpark las transformaciones no se ejecutan hasta que se llama expl铆citamente a una acci贸n.

En este cap铆tulo aprender谩s qu茅 significa esto, c贸mo funciona internamente y c贸mo aprovecharlo para escribir c贸digo m谩s eficiente.


驴Qu茅 es la evaluaci贸n diferida?

Cuando encadenas varias transformaciones en un DataFrame de PySpark, nada se ejecuta en ese momento. En su lugar, Spark construye internamente un DAG (grafo ac铆clico dirigido) con el plan de ejecuci贸n.

Este DAG es evaluado solo cuando llamas a una acci贸n, como show(), count(), collect(), entre otras.

Esto permite a Spark aplicar optimizaciones autom谩ticas, como:

  • Reordenar operaciones para mejorar el rendimiento.
  • Omitir c谩lculos innecesarios.
  • Combinar etapas para reducir movimientos de datos.

Ejemplo: ejecuci贸n diferida

from pyspark.sql import SparkSession
from pyspark.sql.functions import col

spark = SparkSession.builder.appName("LazyEvaluationDemo").getOrCreate()

df = spark.read.csv("data/ventas.csv", header=True, inferSchema=True)

# Transformaciones (no ejecutan nada a煤n)
df_filtrado = df.filter(col("monto") > 1000)
df_seleccion = df_filtrado.select("cliente", "monto")

# Acci贸n que dispara la ejecuci贸n
df_seleccion.show()

En este ejemplo, la lectura del archivo y las transformaciones no se ejecutan hasta que se llama a .show(). En ese momento, Spark analiza el plan, aplica optimizaciones y ejecuta las transformaciones de forma distribuida.


Visualizar el plan de ejecuci贸n

Puedes ver el plan que Spark genera con el m茅todo .explain():

df_seleccion.explain()

Esto muestra el plan l贸gico y f铆sico, incluyendo las etapas, operadores y particiones. Es 煤til para depurar y optimizar tu c贸digo.


驴Por qu茅 es 煤til?

  • Eficiencia: Spark evita pasos innecesarios y reduce el uso de memoria.
  • Escalabilidad: El motor distribuye mejor las tareas cuando tiene una visi贸n completa del flujo.
  • Modularidad: Puedes construir pipelines complejos sin preocuparte por cu谩ndo se ejecuta cada paso.

Comparaci贸n con Pandas

Caracter铆stica Pandas PySpark
Ejecuci贸n Inmediata Diferida (lazy)
Optimizaci贸n autom谩tica No S铆
Planificaci贸n global No (paso a paso) S铆 (plan de ejecuci贸n DAG)
Escalabilidad Limitada (RAM local) Distribuida en cl煤ster

Buenas pr谩cticas

  • Encadena transformaciones: Es m谩s eficiente definir varias operaciones seguidas antes de ejecutar una acci贸n.
  • Evita m煤ltiples acciones innecesarias: Cada acci贸n genera una ejecuci贸n completa.
  • Usa .explain() para entender c贸mo Spark ejecutar谩 tu c贸digo.
  • Ten cuidado con .collect() o .toPandas(), ya que traer谩n todos los datos al driver, ejecutando todo el DAG.

Referencias 煤tiles


Conclusi贸n

La evaluaci贸n diferida es uno de los pilares de Spark. Gracias a ella, Spark puede optimizar tus operaciones y ejecutar solo lo necesario, de forma paralela y distribuida. Entender este modelo es esencial para escribir c贸digo eficiente, escalar tus an谩lisis y evitar errores de rendimiento.