Apache Spark 4.3.0 erschien am 30. Oktober 2026, nur dreieinhalb Monate nach Spark 4.2. Das ist kein Zufall: Ab diesem Release veröffentlicht Spark jedes Quartal ein Feature-Release statt alle sechs Monate. Am 5. November gab Databricks bekannt, dass es in Databricks Runtime 19 verfügbar ist. Das Release schließt mehr als 1.100 Jira-Tickets von über 210 Beitragenden. Hier sind die Änderungen, die für Analysten und Data Engineers zählen, und was wir gesehen haben, als wir PySpark 4.3 auf einer kleinen Maschine mit 2 Kernen ausgeführt haben.
Real-Time Mode erinnert sich jetzt
Real-Time Mode kam in früheren Releases für einfache, zustandslose Datenströme. In 4.3 übernimmt er Aufgaben, die ein Gedächtnis brauchen: einen laufenden Zähler pro Gerät, das Entfernen doppelter Ereignisse oder eine Betrugsprüfung, die auf die letzten Transaktionen schaut. Spark erreicht das mit einem neuen Ausführungsmodell: Erzeugende und verbrauchende Stages laufen gleichzeitig, verbunden durch einen "Pipeline-Shuffle", der Datensätze sofort weitergibt, statt auf das Ende einer ganzen Stage zu warten. Der Code bleibt normales Structured Streaming; nur der Trigger ändert sich.
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()
)SCD Type 2 ohne MERGE-Kopfschmerzen
Eine Tabelle mit dem "aktuellen Stand" sagt Ihnen, wo ein Kunde heute wohnt, nicht wo er wohnte, als er bestellt hat. Historie zu bewahren hieß bisher, eigene MERGE-Logik zu schreiben. Spark 4.3 ergänzt Auto CDC in den Spark Declarative Pipelines um SCD Type 2: Jede Änderung erzeugt eine neue Version der Zeile, mit den Spalten __START_AT und __END_AT, die den Gültigkeitszeitraum markieren.
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);Dasselbe gibt es in Python mit stored_as_scd_type=2. Eine Bedingung: Die Zieltabelle muss in einem Katalog liegen, der Operationen auf Zeilenebene unterstützt, was einfache Parquet-Tabellen nicht tun. In der Praxis heißt das Apache Iceberg im Open-Source-Spark oder Delta-Tabellen auf Databricks.
Project Feather: Spark für kleine Daten
Spark hat schon immer Fixkosten für jede Abfrage gezahlt: Planung, Verteilung der Tasks und Shuffle der Daten dazwischen. Bei einer Stichprobe von 1.000 Zeilen macht dieser Aufwand fast die ganze Zeit aus. Project Feather beginnt, ihn zu beseitigen. Mit einer Einstellung können kleine Abfragen, die eine einzelne kleine Datei lesen, als ein Task ohne Shuffle laufen.
spark.conf.set("spark.sql.optimizer.singleTaskExecution.enabled", "true")
spark.read.parquet("small.parquet").groupBy("category").count().show()Wir haben es mit einer Parquet-Datei mit 900 Zeilen getestet. Der physische Plan verlor seinen Exchange-Schritt, und der schnellste von acht Läufen sank von 85 auf 53 ms. Zum Vergleich: DuckDB 2.0 und Polars 2.1 beantworteten dieselbe Abfrage in etwa 1 ms, und der Start der lokalen Spark-Session dauerte 5,3 Sekunden. Feather macht Spark angenehmer zum Testen von Code an Stichproben, besonders von Code, den ein KI-Assistent vorschlägt, aber es macht Spark nicht zu einer Laptop-Engine. Unser Vergleich DuckDB, Polars oder Spark hat alle Zahlen.
SQL-Verbesserungen
Verschachteltes JSON in einem Schritt in Zeilen und typisierte Spalten verwandeln.
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.Jede Zeile der letzten früheren Zeile zuordnen, etwa dem Preis zum Zeitpunkt eines Handels. Standardmäßig ausgeschaltet.
SET spark.sql.join.asofJoin.enabled = true;
SELECT t.trade_id, q.price
FROM trades AS t
LEFT ASOF JOIN quotes AS q
MATCH_CONDITION (t.ts >= q.ts)
ON t.sym = q.sym;Ohne die Einstellung bricht Spark mit dem Fehler UNSUPPORTED_FEATURE.ASOF_JOIN ab. Unser Leitfaden zu ASOF JOIN zeigt dieselbe Abfrage in Snowflake, DuckDB, Polars und pandas.
counter_diff: eine Fensterfunktion, die einen laufenden Zähler in die Änderung seit der vorherigen Zeile umrechnet. In unserem Test lieferte sie NULL für die erste Zeile und beim Zurücksetzen des Zählers.jaro_winkler_similarity: Ähnlichkeit zwischen Zeichenketten von 0 bis 1, nützlich für unscharfe Abgleiche ("Snowflake" und "Snowflak" ergaben 0,98).collect_union,to_base32undfrom_base32.- VARIANT bearbeiten:
variant_set,variant_insert,variant_deleteundvariant_array_append.
Ebenfalls neu: ANSI-UNNEST in der FROM-Klausel, Time Travel mit einem @ nach dem Tabellennamen, COMMENT ON COLUMN, ein TIME-Typ bis in Nanosekunden und Zeitstempel mit Nanosekunden-Genauigkeit (TIMESTAMP_NTZ(9)) als aktivierbare Vorschau.
Kleinere Änderungen, die man kennen sollte
- Dateien in Archiven lesen: CSV, JSON, Parquet und mehr lassen sich jetzt direkt aus tar-, zip- und 7z-Dateien lesen (optional).
- DataFrame.zip verbindet zwei Spaltenauswahlen desselben DataFrames, ohne auf RDDs zurückzugreifen.
- Spark Connect erhält REST-Endpunkte zum Auflisten von Sessions und Operationen, Operations-IDs für die Nachverfolgung und einen besseren JDBC-Treiber mit ARRAY, MAP und STRUCT.
- Schnelleres Lesen von Parquet und mehrere Verbesserungen am Optimierer, etwa Codegenerierung für UNION als Standard.
- Experimentell: Einfache Python-UDFs wie
len()können in native Spark-Ausdrücke übersetzt werden.
Vor dem Upgrade
- 1
Python prüfen
Spark 4.3 streicht Python 3.10 und braucht NumPy 1.23.2 oder neuer. Die offiziellen Docker-Images nutzen jetzt Python 3.14.
- 2
Den Migrationsleitfaden lesen
Im ANSI-Modus melden ceil und floor jetzt Überläufe als Fehler, und spark.rdd.compress ist standardmäßig an.
- 3
Die Web-Oberfläche prüfen
Eine Content Security Policy ist jetzt standardmäßig aktiv; eigene UI-Plugins müssen eventuell angepasst werden.
- 4
Vorschauen bewusst einschalten
ASOF JOIN, BIN BY und Nanosekunden-Zeitstempel hängen an Einstellungen und können sich ändern.
- 5
Auf Databricks die Runtime prüfen
Laut Databricks ist Spark 4.3 in Runtime 19 verfügbar; prüfen Sie die Spark-Version in den Runtime-Release-Notes und testen Sie Jobs zuerst auf einer Kopie.
Testen Sie Ihr Wissen
1/3Wie oft veröffentlicht Apache Spark ab 4.3 Feature-Releases?
Spark 4.3 beginnt einen Quartalsrhythmus für Feature-Releases.
2/3Was fügt SCD Type 2 in Auto CDC einer Tabelle hinzu?
Die Historie liegt in versionierten Zeilen, begrenzt durch __START_AT und __END_AT.
3/3Was passiert, wenn Sie SQL ASOF JOIN in Spark 4.3 ohne geänderte Einstellung ausführen?
ASOF JOIN ist eine Vorschau; setzen Sie zuerst spark.sql.join.asofJoin.enabled auf true.
Sie haben 0 von 3 richtig.
Weiterlesen: was in Spark 4.2 neu war, der Spickzettel für Spark SQL und PySpark und das Databricks-Update Oktober 2026.
Quellen: Release Notes und News zu Apache Spark 4.3.0 (30. Oktober 2026); Databricks-Blog, "Introducing Apache Spark 4.3, now available in Databricks Runtime 19" (5. November 2026); eigene Tests mit PySpark 4.3.0 im lokalen Modus auf einer Maschine mit 2 Kernen, Zeiten nur als Richtwerte.
