Aprender  /  Novedades

Novedades de Apache Spark 4.3: estado en tiempo real, SCD Type 2 y ASOF JOIN

Spark 4.3 es la primera versión del nuevo calendario trimestral, y viene cargada: streaming con estado en una décima de segundo, tablas que guardan el historial sin MERGE escrito a mano y un camino más rápido para los datos pequeños. Lo instalamos y probamos las novedades principales.

Novedades8 min de lecturaActualizado el 9 de noviembre de 2026
PythonSQLDatabricksNovedades
Todas las guías y chuletas

Apache Spark 4.3.0 salió el 30 de octubre de 2026, solo tres meses y medio después de Spark 4.2. No es casualidad: a partir de esta versión, Spark publica una versión de funcionalidades cada trimestre en lugar de cada seis meses. El 5 de noviembre Databricks anunció que está disponible en Databricks Runtime 19. La versión cierra más de 1.100 tickets de Jira de más de 210 colaboradores. Estos son los cambios que importan a analistas e ingenieros de datos, y lo que vimos al ejecutar PySpark 4.3 en una máquina pequeña de 2 núcleos.

141Milisegundos P99el más lento de tres benchmarks con estado
1100Tickets de Jiracerrados en esta versión
210Colaboradoresy más
3Mesesentre versiones de funcionalidades a partir de ahora

Real-Time Mode ahora recuerda

Real-Time Mode llegó en versiones anteriores para flujos sencillos, sin estado. En la 4.3 se encarga de los trabajos que necesitan memoria: un recuento acumulado por dispositivo, eliminar eventos duplicados o una comprobación antifraude que mira las últimas transacciones. Spark lo consigue con un nuevo modelo de ejecución: las etapas que producen y las que consumen se ejecutan a la vez, conectadas por un "shuffle en pipeline" que pasa los registros según llegan en lugar de esperar a que termine una etapa entera. El código sigue siendo Structured Streaming normal; solo cambia el disparador.

Python
counts = events.groupBy("device_id").count()

query = (
    counts.selectExpr("CAST(device_id AS STRING) AS key",
                      "CAST(count AS STRING) AS value")
    .writeStream.format("kafka")
    .option("kafka.bootstrap.servers", "localhost:9092")
    .option("topic", "device-counts")
    .option("checkpointLocation", "/checkpoints/device-counts")
    .outputMode("update")
    .trigger(realTime="5 minutes")   # checkpoint interval, not latency
    .start()
)
Latencia de extremo a extremo P99 en Real-Time Mode de Spark 4.3
136 msdropDuplicates
139 msAgregación por ventanas
141 mstransformWithState

SCD Type 2 sin el dolor de cabeza del MERGE

Una tabla de "estado actual" te dice dónde vive hoy un cliente, no dónde vivía cuando hizo un pedido. Conservar el historial obligaba a escribir tu propia lógica de MERGE. Spark 4.3 añade SCD Type 2 a Auto CDC en Spark Declarative Pipelines: cada cambio crea una nueva versión de la fila, con las columnas __START_AT y __END_AT que marcan cuándo era válida.

SQL
CREATE STREAMING TABLE customer_history;

CREATE FLOW customer_history_cdc AS AUTO CDC INTO customer_history
FROM STREAM(customer_changes)
KEYS (customer_id)
SEQUENCE BY event_time
STORED AS SCD TYPE 2
TRACK HISTORY ON (status, region);

Lo mismo existe en Python con stored_as_scd_type=2. Una condición: la tabla de destino debe estar en un catálogo que admita operaciones a nivel de fila, y las tablas Parquet simples no lo hacen. En la práctica significa Apache Iceberg con Spark de código abierto, o tablas Delta en Databricks.

Project Feather: Spark para datos pequeños

Spark siempre ha pagado un coste fijo por cada consulta: planificación, reparto de tareas y shuffle de datos entre ellas. Con una muestra de 1.000 filas, ese coste es casi todo el tiempo. Project Feather empieza a eliminarlo. Con un ajuste, las consultas pequeñas que leen un único archivo pequeño pueden ejecutarse como una sola tarea, sin shuffle.

Python
spark.conf.set("spark.sql.optimizer.singleTaskExecution.enabled", "true")
spark.read.parquet("small.parquet").groupBy("category").count().show()

Lo probamos con un archivo Parquet de 900 filas. El plan físico perdió su paso Exchange y la más rápida de ocho ejecuciones bajó de 85 a 53 ms. Como comparación, DuckDB 2.0 y Polars 2.1 respondieron a la misma consulta en alrededor de 1 ms, y arrancar la sesión local de Spark tardó 5,3 segundos. Feather hace Spark más cómodo para probar código con muestras, sobre todo código sugerido por un asistente de IA, pero no lo convierte en un motor de portátil. Nuestra comparación DuckDB frente a Polars frente a Spark tiene todas las cifras.

Mejoras en SQL

Convierte JSON anidado en filas y columnas con tipo en un solo paso.

SQL
SELECT title, content
FROM JSON_TABLE(
  '{"sections":[{"title":"Returns","text":"Return within 30 days."},
                {"title":"Delivery","text":"Ships in 2 days."}]}',
  '$.sections[*]' COLUMNS (
    title   STRING PATH '$.title',
    content STRING PATH '$.text'
  )
) AS s;
-- Returns  | Return within 30 days.
-- Delivery | Ships in 2 days.

También es nuevo: UNNEST ANSI en la cláusula FROM, el viaje en el tiempo con una @ tras el nombre de la tabla, COMMENT ON COLUMN, un tipo TIME hasta nanosegundos y marcas de tiempo con precisión de nanosegundo (TIMESTAMP_NTZ(9)) como vista previa opcional.

Cambios menores que conviene conocer

  • Leer archivos dentro de comprimidos: CSV, JSON, Parquet y más se pueden leer directamente de archivos tar, zip y 7z (opcional).
  • DataFrame.zip combina dos selecciones de columnas del mismo DataFrame sin recurrir a los RDD.
  • Spark Connect gana endpoints REST para listar sesiones y operaciones, ID de operación para el seguimiento y un mejor controlador JDBC con ARRAY, MAP y STRUCT.
  • Lecturas de Parquet más rápidas y varias mejoras del optimizador, como la generación de código para UNION activada por defecto.
  • Experimental: las UDF de Python sencillas, como len(), pueden traducirse a expresiones nativas de Spark.

Antes de actualizar

  1. 1

    Revisa Python

    Spark 4.3 deja Python 3.10 y necesita NumPy 1.23.2 o superior. Las imágenes Docker oficiales ya usan Python 3.14.

  2. 2

    Lee la guía de migración

    En modo ANSI, ceil y floor ahora dan errores de desbordamiento, y spark.rdd.compress está activado por defecto.

  3. 3

    Revisa la interfaz web

    Ahora hay una política de seguridad de contenido activada por defecto; los plugins de interfaz propios pueden necesitar cambios.

  4. 4

    Activa las vistas previas a conciencia

    ASOF JOIN, BIN BY y las marcas de tiempo en nanosegundos dependen de ajustes y pueden cambiar.

  5. 5

    En Databricks, revisa tu runtime

    Databricks dice que Spark 4.3 está disponible en el Runtime 19; confirma la versión de Spark en las notas del runtime y prueba los trabajos en una copia.

Pon a prueba lo que has aprendido

1/3¿Cada cuánto publicará Apache Spark versiones de funcionalidades a partir de la 4.3?

2/3¿Qué añade SCD Type 2 en Auto CDC a una tabla?

3/3¿Qué pasa si ejecutas SQL ASOF JOIN en Spark 4.3 sin cambiar ningún ajuste?

Sigue leyendo: las novedades de Spark 4.2, la chuleta de Spark SQL y PySpark y la actualización de Databricks de octubre de 2026.

Fuentes: notas de versión y noticias de Apache Spark 4.3.0 (30 de octubre de 2026); blog de Databricks, "Introducing Apache Spark 4.3, now available in Databricks Runtime 19" (5 de noviembre de 2026); nuestras propias pruebas con PySpark 4.3.0 en modo local en una máquina de 2 núcleos, con tiempos solo orientativos.

Alessandro Ecclesie AgazziEscrito por Alessandro Ecclesie Agazzi, analytics engineer en Londres. Actualizado el 9 de noviembre de 2026. Sobre mí

¿Te ha resultado útil?

Aquí se publican con regularidad nuevas guías y artículos sobre las novedades en datos e IA. Sígueme en LinkedIn o comparte este artículo con un compañero.