Impara  /  Novità

Le novità di Apache Spark 4.3: stato in tempo reale, SCD Type 2 e ASOF JOIN

Spark 4.3 è la prima release del nuovo calendario trimestrale, ed è corposa: streaming con stato in circa un decimo di secondo, tabelle che conservano la storia senza MERGE scritti a mano e una strada più veloce per i dati piccoli. L'abbiamo installato e abbiamo provato le novità principali.

Novità8 min di letturaAggiornato il 9 novembre 2026
PythonSQLDatabricksNovità
Tutte le guide e i cheat sheet

Apache Spark 4.3.0 è uscito il 30 ottobre 2026, appena tre mesi e mezzo dopo Spark 4.2. Non è un caso: da questa versione Spark pubblica una release di funzionalità ogni trimestre invece che ogni sei mesi. Il 5 novembre Databricks ha annunciato che è disponibile in Databricks Runtime 19. La release chiude oltre 1.100 ticket Jira da più di 210 contributori. Ecco le novità che contano per chi analizza dati e per i data engineer, più quello che abbiamo visto eseguendo PySpark 4.3 su una piccola macchina con 2 core.

141Millisecondi P99il più lento di tre benchmark con stato
1100Ticket Jirachiusi in questa release
210Contributorie oltre
3Mesitra una release di funzionalità e l'altra d'ora in poi

Real-Time Mode ora ricorda

Real-Time Mode era arrivato nelle versioni precedenti per flussi semplici, senza stato. Nella 4.3 gestisce i lavori che hanno bisogno di memoria: un conteggio progressivo per dispositivo, la rimozione di eventi duplicati o un controllo antifrode che guarda le ultime transazioni. Spark ci riesce con un nuovo modello di esecuzione: le fasi che producono e quelle che consumano girano contemporaneamente, collegate da uno "shuffle in pipeline" che passa i record man mano che arrivano invece di aspettare la fine di un'intera fase. Il codice resta normale Structured Streaming; cambia solo il trigger.

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()
)
Latenza end-to-end P99 in Real-Time Mode di Spark 4.3
136 msdropDuplicates
139 msAggregazione a finestre
141 mstransformWithState

SCD Type 2 senza il mal di testa del MERGE

Una tabella con lo "stato attuale" ti dice dove vive un cliente oggi, non dove viveva quando ha fatto un ordine. Conservare la storia significava scrivere da sé la logica di MERGE. Spark 4.3 aggiunge SCD Type 2 ad Auto CDC nelle Spark Declarative Pipelines: ogni modifica crea una nuova versione della riga, con le colonne __START_AT e __END_AT che indicano quando era valida.

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 stesso è disponibile in Python con stored_as_scd_type=2. Una condizione: la tabella di destinazione deve stare in un catalogo che supporta operazioni a livello di riga, e le semplici tabelle Parquet non lo fanno. In pratica significa Apache Iceberg con Spark open source, o tabelle Delta su Databricks.

Project Feather: Spark per i dati piccoli

Spark ha sempre pagato un costo fisso per ogni query: pianificazione, assegnazione dei task e shuffle dei dati tra di essi. Su un campione di 1.000 righe quel costo è quasi tutto il tempo. Project Feather inizia a eliminarlo. Con un'impostazione, le query piccole che leggono un solo file piccolo possono girare come un unico task, senza shuffle.

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

L'abbiamo provato su un file Parquet di 900 righe. Il piano fisico ha perso il passaggio Exchange e la più veloce di otto esecuzioni è scesa da 85 a 53 ms. Per confronto, DuckDB 2.0 e Polars 2.1 hanno risposto alla stessa query in circa 1 ms, e avviare la sessione Spark locale ha richiesto 5,3 secondi. Feather rende Spark più comodo per provare il codice su campioni, soprattutto codice suggerito da un assistente AI, ma non trasforma Spark in un motore da portatile. Il nostro confronto DuckDB contro Polars contro Spark ha tutti i numeri.

Miglioramenti all'SQL

Trasforma JSON annidato in righe e colonne tipizzate in un solo passaggio.

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.

Altre novità: UNNEST ANSI nella clausola FROM, il time travel con una @ dopo il nome della tabella, COMMENT ON COLUMN, un tipo TIME fino ai nanosecondi e timestamp con precisione al nanosecondo (TIMESTAMP_NTZ(9)) come anteprima da attivare.

Piccole modifiche da conoscere

  • Lettura di file dentro gli archivi: CSV, JSON, Parquet e altri si possono leggere direttamente da file tar, zip e 7z (da attivare).
  • DataFrame.zip unisce due selezioni di colonne dello stesso DataFrame senza ricorrere agli RDD.
  • Spark Connect ottiene endpoint REST per elencare sessioni e operazioni, ID delle operazioni per il tracciamento e un driver JDBC migliore con supporto ad ARRAY, MAP e STRUCT.
  • Letture Parquet più veloci e diversi miglioramenti all'ottimizzatore, come la generazione di codice per UNION attiva di default.
  • Sperimentale: le UDF Python semplici, come len(), possono essere tradotte in espressioni native di Spark.

Prima di aggiornare

  1. 1

    Controlla Python

    Spark 4.3 abbandona Python 3.10 e richiede NumPy 1.23.2 o successivo. Le immagini Docker ufficiali ora usano Python 3.14.

  2. 2

    Leggi la guida alla migrazione

    In modalità ANSI ceil e floor ora segnalano errori di overflow, e spark.rdd.compress è attivo di default.

  3. 3

    Controlla l'interfaccia web

    Una content security policy ora è attiva di default; i plugin personalizzati dell'interfaccia potrebbero richiedere modifiche.

  4. 4

    Attiva le anteprime consapevolmente

    ASOF JOIN, BIN BY e i timestamp al nanosecondo dipendono da impostazioni e possono cambiare.

  5. 5

    Su Databricks, controlla il runtime

    Databricks dice che Spark 4.3 è disponibile nel Runtime 19; verifica la versione di Spark nelle note di rilascio del runtime e prova i job su una copia.

Verifica cosa hai capito

1/3Ogni quanto Apache Spark pubblicherà release di funzionalità dalla 4.3 in poi?

2/3Cosa aggiunge a una tabella SCD Type 2 in Auto CDC?

3/3Cosa succede se esegui SQL ASOF JOIN in Spark 4.3 senza cambiare impostazioni?

Continua a leggere: le novità di Spark 4.2, la guida rapida a Spark SQL e PySpark e l'aggiornamento di Databricks di ottobre 2026.

Fonti: note di rilascio e notizie di Apache Spark 4.3.0 (30 ottobre 2026); blog di Databricks, "Introducing Apache Spark 4.3, now available in Databricks Runtime 19" (5 novembre 2026); nostri test con PySpark 4.3.0 in modalità locale su una macchina con 2 core, con tempi solo indicativi.

Alessandro Ecclesie AgazziScritto da Alessandro Ecclesie Agazzi, analytics engineer a Londra. Aggiornato il 9 novembre 2026. Chi sono

Ti è stato utile?

Qui escono regolarmente nuove guide e articoli sulle novità di dati e AI. Seguimi su LinkedIn o condividi questo articolo con un collega.