⚠ Errata — lies Lektion 12 begleitend dazu
Diese Lektion zeigt, wie du eine 5-Minuten-Pipeline baust, überspringt aber die vorgelagerte Frage, ob du das solltest — und ihr Code setzt Classic Compute voraus. Auf Serverless wird trigger(processingTime=…) nicht unterstützt und Trigger.Once() ist deprecated. Siehe Lektion 12 — Ist Databricks das Richtige für 5-Minuten-SCADA-Daten? für die korrigierte Einordnung der Latenzstufen und die aktuelle Empfehlung, das Ganze als Lakeflow-Pipeline zu bauen.
Im Energiemarkt können neue Telemetrie- und Marktsignale alle 5 Minuten eintreffen. Diese Lektion zeigt, wie Databricks eine latenzarme Prognose-Pipeline unterstützt, die häufige Updates aufnimmt, Features aktualisiert und mit kurzem SLA eine neue Prognose schreibt.
Für deinen Anwendungsfall bedeutet Echtzeit:
Nutze eine schnelle Spur für die häufigen 5-Minuten-Updates und eine langsame Spur für das tägliche Modelltraining. Die schnelle Spur nimmt frische Daten auf und bewertet sie; die langsame Spur trainiert Modelle auf historischen Daten neu. Beide müssen dasselbe Delta-basierte Anlagenmodell und dieselbe Data Governance teilen.
Das ist der erste wichtige Schritt. Eine Micro-Batch-Pipeline erfasst jedes 5-Minuten-Payload und schreibt es mit Checkpointing in eine Delta-Bronze-Tabelle. Damit bleiben die Daten dauerhaft, abfragbar und wiederholbar.
from pyspark.sql.functions import col
streaming_df = (
spark.readStream
.format("cloudFiles")
.option("cloudFiles.format", "json")
.option("cloudFiles.schemaLocation", "/tmp/checkpoints/telemetry_schema")
.option("cloudFiles.inferColumnTypes", "true")
.load("/mnt/data/realtime/telemetry/")
.select(
col("asset_id"),
col("timestamp"),
col("wind_speed"),
col("power_output"),
col("market_price")
)
)
query = (
streaming_df.writeStream
.format("delta")
.option("checkpointLocation", "/tmp/checkpoints/bronze_telemetry")
.outputMode("append")
.trigger(processingTime="5 minutes")
.table("prod.bronze.telemetry")
)
Nutze eine zweite Micro-Batch-Stufe, die den Bronze-Stream liest und alle 5 Minuten Silver-Features und Prognosen aktualisiert. Ein praxistaugliches Muster ist foreachBatch(): Es gibt dir deterministische Batch-Verarbeitung plus Schreibzugriffe auf Delta-Tabellen.
def process_batch(batch_df, batch_id):
# 1) Telemetrie mit Anlagen-Metadaten anreichern
enriched = (
batch_df
.join(spark.table("prod.silver.dim_assets"), "asset_id", "left")
.withColumn("event_time", col("timestamp"))
)
# 2) Zeilen für die inkrementelle Feature-Tabelle erzeugen
features = compute_features(enriched)
# 3) Mit dem MLflow-Modell scoren
model = mlflow.pyfunc.load_model("models:/wind-forecast/latest")
scored = model.predict(features.toPandas())
# 4) Gold-Prognose schreiben
to_write = (
features
.withColumn("forecast", lit(scored))
.withColumn("produced_at", current_timestamp())
)
(to_write.write
.format("delta")
.mode("append")
.saveAsTable("prod.gold.forecast_ts"))
query = (
spark.readStream
.table("prod.bronze.telemetry")
.writeStream
.foreachBatch(process_batch)
.option("checkpointLocation", "/tmp/checkpoints/silver_scoring")
.trigger(processingTime="5 minutes")
.start()
)
Hinweis: Wandle in Produktion nicht den gesamten Micro-Batch nach pandas um, außer der Batch ist klein. Für größere Flotten sind verteiltes Scoring in Spark oder ein MLflow-Model-Serving-Endpunkt die sicherere Wahl.
model_version und produced_at für die Nachvollziehbarkeit.Betriebsregel
Bei einem 5-Minuten-Update-Zyklus solltest du die Pipeline so auslegen, dass jeder Lauf deutlich unter 5 Minuten fertig ist. Das schafft Luft für Retries und stellt sicher, dass der nächste Zyklus nicht verzögert wird.
Für deinen Prognose-Anwendungsfall passt eine 5-Minuten-Micro-Batch-Pipeline meistens am besten:
Durchgehendes Streaming ist sinnvoll, wenn die Latenz im Sekundenbereich liegen muss, bringt aber zusätzliche Komplexität bei State Management, Exactly-once-Joins und Betriebsaufwand. Für Prognose-Aktualisierungen alle 5 Minuten ist Micro-Batch der richtige Kompromiss.
| Muster | Warum es zählt | Wo du es einsetzt |
|---|---|---|
| Auto Loader / cloudFiles | Effiziente, schemabewusste inkrementelle Datei-Ingestion | Telemetriedateien, die im Cloud-Storage landen |
| Delta Streaming + foreachBatch | Deterministische, wiederholbare Batch-Verarbeitung fürs Scoring | Silver- und Gold-Updates der schnellen Spur |
| MLflow Model Registry | Versionierte Modelle + sichere Stage-Promotion | Vorhersagen mit exakt dem Modell, das in Produktion läuft |
| Checkpointing | Exactly-once-Zustellung und sicherer Neustart | Jeder Streaming-Write nach Delta und jeder Scoring-Job |
Du erhältst alle 5 Minuten Telemetrie und aktualisierst danach jeweils die Prognose. Welches Muster erfüllt Analyse- und Produktionsanforderungen gleichzeitig?
Warum ist Micro-Batch-Verarbeitung bei 5-Minuten-Prognose-Updates meist besser als durchgehendes Streaming?
Deine 5-Minuten-Prognose-Pipeline darf keinen Zyklus verpassen. Was solltest du überwachen?
📖 Empfohlene Lektüre
Databricks-Dokumentation zu Structured Streaming — behandelt Micro-Batch-Trigger, Checkpointing, Delta-Writes und produktive Streaming-Muster für latenzarme Pipelines.
Jetzt weißt du, wie du die schnelle Spur für 5-Minuten-Updates entwirfst. Bitte deinen Lehrer, die nächste Lektion um Echtzeit-Model-Serving oder Streaming-Feature-State in derselben Energiemarkt-Pipeline aufzubauen.
Brauchst du ein Beispiel-Notebook für 5-Minuten-Streaming-Ingestion und -Scoring? Frag mich, dann erstelle ich eines.
Rechtliches: Impressum