Python-språkreferens för Lakeflow Spark deklarativa pipelines

Det här avsnittet innehåller information om Python-programmeringsgränssnittet Lakeflow Spark Deklarativa pipelines (SDP).

pipelines modulöversikt

Python-funktioner för Lakeflow Spark deklarativa pipelines definieras i modulen pyspark.pipelines (importeras som dp). Dina pipelines som implementeras med Python-API:et måste importera den här modulen:

from pyspark import pipelines as dp

Anmärkning

Modulen pipelines är endast tillgänglig i kontexten för en pipeline. Den är inte tillgänglig i Python som körs utanför pipelines. Mer information om hur du redigerar pipelinekod finns i Utveckla och felsöka ETL-pipelines med Lakeflow Pipelines Editor.

Apache Spark-pipelines™

Apache Spark innehåller deklarativa pipelines som börjar i Spark 4.1, tillgängliga via modulen pyspark.pipelines . Databricks Runtime utökar dessa funktioner med öppen källkod med ytterligare API:er och integreringar för hanterad produktionsanvändning.

Kod som skrivs med modulen med öppen källkod pipelines körs utan ändringar i Azure Databricks. Följande funktioner ingår inte i Apache Spark:

  • dp.create_auto_cdc_flow
  • dp.create_auto_cdc_from_snapshot_flow
  • @dp.expect(...)
  • @dp.temporary_view

Modulen pipelines hette dlt tidigare i Azure Databricks. Mer information och mer information om skillnaderna från Apache Spark finns i Vad hände med @dlt?.

Funktioner för datauppsättningsdefinitioner

Pipelines använder Python-dekoratörer för att definiera datauppsättningar som materialiserade vyer och strömmande tabeller. Se Funktioner för att definiera datauppsättningar.

API-referensen

Överväganden för Python-pipelines

Följande är viktiga överväganden när du implementerar pipelines med Python-gränssnittet Lakeflow Spark Declarative Pipelines (SDP):

  • SDP utvärderar koden som definierar en pipeline flera gånger under planerings- och pipelinekörningar. Python-funktioner som definierar datauppsättningar bör endast innehålla den kod som krävs för att definiera tabellen eller vyn. Godtycklig Python-logik som ingår i datamängdsdefinitioner kan leda till oväntat beteende.
  • Försök inte implementera anpassad övervakningslogik i dina datauppsättningsdefinitioner. Se Definiera specifik övervakning av pipelines med händelsekrokar.
  • Den funktion som används för att definiera en datauppsättning måste returnera en Spark DataFrame. Inkludera inte logik i datauppsättningsdefinitioner som inte är relaterade till en returnerad DataFrame.
  • Använd aldrig metoder som sparar eller skriver till filer eller tabeller som en del av din pipeline-datauppsättningskod.

Exempel på Apache Spark-åtgärder som aldrig ska användas i pipelinekod:

  • collect()
  • count()
  • toPandas()
  • save()
  • saveAsTable()
  • start()
  • toTable()

Vad hände med @dlt?

Tidigare använde Azure Databricks modulen dlt för att stödja pipelinefunktioner. Modulen dlt har ersatts av modulen pyspark.pipelines . Du kan fortfarande använda dlt, men Databricks rekommenderar att du använder pipelines.

Skillnader mellan DLT, SDP och Apache Spark

Följande tabell visar skillnaderna i syntax och funktioner mellan DLT, Lakeflow Spark Deklarativa Pipelines, och Apache Spark Deklarativa Pipelines.

Area DLT-syntax SDP-syntax (Lakeflow och Apache, om tillämpligt) Tillgänglig i Apache Spark
Importer import dlt from pyspark import pipelines (as dpvalfritt) Yes
Direktuppspelningstabell @dlt.table med en strömmande dataram @dp.table Yes
Materialiserad vy @dlt.table med en batch-dataframe @dp.materialized_view Yes
View @dlt.view @dp.temporary_view Yes
Lägg till flöde @dlt.append_flow @dp.append_flow Yes
SQL – direktuppspelning CREATE STREAMING TABLE ... CREATE STREAMING TABLE ... Yes
SQL – materialiserad CREATE MATERIALIZED VIEW ... CREATE MATERIALIZED VIEW ... Yes
SQL – flöde CREATE FLOW ... CREATE FLOW ... Yes
Händelselogg spark.read.table("event_log") spark.read.table("event_log") Nej
Tillämpa ändringar (CDC) dlt.apply_changes(...) dp.create_auto_cdc_flow(...) Nej
Expectations @dlt.expect(...) dp.expect(...) Nej
Kontinuerligt läge Pipelinekonfiguration med kontinuerlig utlösare (samma) Nej
Sjunka @dlt.create_sink(...) dp.create_sink(...) Yes