Sdílet prostřednictvím


Referenční dokumentace jazyka Python pro deklarativní kanály Sparku Lakeflow

Tato část obsahuje podrobnosti o programovacím rozhraní Pythonu pro Lakeflow Spark Deklarativní Potrubí (SDP).

pipelines přehled modulu

Funkce Pythonu deklarativních kanálů Sparku Lakeflow jsou definované v pyspark.pipelines modulu (importované jako dp). Vaše kanály implementované pomocí rozhraní Python API musí importovat tento modul:

from pyspark import pipelines as dp

Poznámka:

Modul Pipelines je k dispozici pouze v kontextu kanálu. Není k dispozici v Pythonu spuštěném mimo datové toky. Další informace o úpravě kódu kanálu najdete v tématu Vývoj a ladění kanálů ETL pomocí Editoru kanálů Lakeflow.

Datové toky Apache Spark™

Apache Spark zahrnuje deklarativní kanály začínající ve Sparku pyspark.pipelines 4.1, které jsou dostupné prostřednictvím modulu. Databricks Runtime rozšiřuje tyto opensourcové funkce s dalšími rozhraními API a integracemi pro spravované produkční použití.

Kód napsaný pomocí opensourcového pipelines modulu běží bez úprav v Azure Databricks. Následující funkce nejsou součástí Apache Sparku:

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

Modul pipelines byl dříve nazýván dlt v Azure Databricks. Podrobnosti a další informace o rozdílech od Apache Sparku najdete v tématu Co se stalo @dlts ?.

Funkce pro definice datových sad

Pipelines používají dekorátory v Pythonu k definování datových sad, jako jsou materializovaná zobrazení a streamované tabulky. Viz Funkce pro definování datových sad.

Referenční informace k rozhraní API

Důležité informace o kanálech Pythonu

Při implementaci kanálů pomocí rozhraní Pythonu SDP (Lakeflow Spark Declarative Pipelines) jsou důležité důležité aspekty:

  • SDP několikrát vyhodnocuje kód, který definuje kanál, během plánování a běhů kanálu. Funkce Pythonu, které definují datové sady, by měly obsahovat pouze kód potřebný k definování tabulky nebo zobrazení. Libovolná logika Pythonu zahrnutá v definicích datových sad může vést k neočekávanému chování.
  • Nepokoušejte se implementovat vlastní logiku monitorování v definicích datové sady. Viz Definování vlastního monitorování datových toků pomocí událostních hooků.
  • Funkce použitá k definování datové sady musí vrátit datový rámec Sparku. Do definic datové sady nezahrnujte logiku, která nesouvisí s vráceným datovým rámcem.
  • Nikdy nepoužívejte metody, které ukládají nebo zapisují do souborů nebo tabulek jako součást kódu datové sady pipeline.

Příklady operací Apache Sparku, které by se nikdy neměly používat v kódu zpracovatelského řetězce:

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

Co se stalo @dlt?

Dříve služba Azure Databricks používala modul dlt k podpoře funkcionality pipeline. Modul dlt byl nahrazen modulem pyspark.pipelines . Stále můžete používat dlt, ale Databricks doporučuje používat pipelines.

Rozdíly mezi DLT, SDP a Apache Sparkem

Následující tabulka ukazuje rozdíly v syntaxi a funkcích mezi deklarativními kanály DLT, Lakeflow Spark a deklarativními kanály Apache Sparku.

Area Syntaxe DLT Syntaxe SDP (Lakeflow a Apache, kde je to použitelné) K dispozici v Apache Sparku
Importy import dlt from pyspark import pipelines (as dpvolitelně) Ano
Tabulka pro streamování @dlt.table se streamovaným datovým rámcem @dp.table Ano
Materializované zobrazení @dlt.table pomocí dávkového datového rámce @dp.materialized_view Ano
Zobrazit @dlt.view @dp.temporary_view Ano
Připojit tok @dlt.append_flow @dp.append_flow Ano
SQL – streamování CREATE STREAMING TABLE ... CREATE STREAMING TABLE ... Ano
SQL – materializované CREATE MATERIALIZED VIEW ... CREATE MATERIALIZED VIEW ... Ano
SQL – tok CREATE FLOW ... CREATE FLOW ... Ano
Protokol událostí spark.read.table("event_log") spark.read.table("event_log") Ne
Použít změny (CDC) dlt.apply_changes(...) dp.create_auto_cdc_flow(...) Ne
Expectations @dlt.expect(...) dp.expect(...) Ne
Nepřetržitý režim Konfigurace pipeline s průběžným spouštěčem (stejné) Ne
Dřez @dlt.create_sink(...) dp.create_sink(...) Ano