Skip to content

Structured Streaming

Structured Streaming permite procesar datos continuos usando la API de DataFrames y SQL de Spark. Es útil para eventos, logs, métricas y flujos que llegan de forma incremental.

Conceptos clave

  • Stream: fuente continua de datos.
  • Micro-batch: pequeños lotes procesados periódicamente.
  • Trigger: frecuencia de procesamiento.
  • Checkpoint: estado persistente para tolerancia a fallos.
  • Watermark: límite temporal para gestionar eventos tardíos.
  • Sink: destino del resultado.

Lectura de streaming

python
stream_df = (
    spark.readStream
    .format("json")
    .schema(schema)
    .load("/data/events")
)

Transformación

python
from pyspark.sql.functions import col

errores = stream_df.filter(col("level") == "ERROR")

Escritura de streaming

python
query = (
    errores.writeStream
    .format("parquet")
    .option("path", "/data/output/errors")
    .option("checkpointLocation", "/data/checkpoints/errors")
    .start()
)

Ventanas temporales

python
from pyspark.sql.functions import window

conteo = (
    stream_df
    .groupBy(window(col("timestamp"), "5 minutes"), col("event_type"))
    .count()
)

Buenas prácticas

  • Define schemas explícitos.
  • Usa checkpoint en rutas estables.
  • Controla eventos tardíos con watermark cuando agregues por tiempo.
  • Monitoriza latencia y throughput.
  • Separa rutas de entrada, salida y checkpoints.
  • Diseña sinks idempotentes cuando sea posible.

Errores comunes

  • Ejecutar streaming sin checkpoint.
  • Cambiar schema sin plan de migración.
  • No controlar duplicados.
  • Usar rutas temporales para checkpoints.
  • No dimensionar recursos según volumen de eventos.

Chuleta rápida

txt
readStream = leer flujo
writeStream = escribir flujo
checkpoint = recuperación
trigger = frecuencia
watermark = eventos tardíos
sink = destino

Recursos relacionados