Поделиться через


Справочник по языку Python для декларативных конвейеров Spark Lakeflow

В этом разделе содержатся сведения о интерфейсе программирования Python для Декларативного конвейера Spark Lakeflow (SDP).

pipelines Общие сведения о модуле

Функции Python декларативного конвейера Spark Lakeflow определяются в модуле pyspark.pipelines (импортированный как dp). Конвейеры, реализованные с помощью API Python, должны импортировать этот модуль:

from pyspark import pipelines as dp

Замечание

Модуль конвейеров доступен только в контексте конвейера. Он недоступен в Python, работающем за пределами конвейеров. Дополнительные сведения об редактировании кода конвейера см. в статье "Разработка и отладка конвейеров ETL" с помощью редактора Конвейеров Lakeflow.

Конвейеры Apache Spark™

Apache Spark включает декларативные конвейеры, начиная с Spark 4.1, которые доступны через pyspark.pipelines модуль. Среда выполнения Databricks расширяет эти возможности с открытым исходным кодом с помощью дополнительных API и интеграции для управляемого рабочего использования.

Код, написанный с помощью модуля с открытым исходным кодом pipelines , выполняется без изменений в Azure Databricks. Следующие функции не являются частью Apache Spark:

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

Модуль pipelines ранее назывался dlt в Azure Databricks. Дополнительные сведения о различиях от Apache Spark см. в статье "Что произошло с @dlt?".

Функции для определений наборов данных

Конвейеры обработки данных используют декораторы Python для определения наборов данных, например, материализованных представлений и потоковых таблиц. См. функции для определения наборов данных.

Справочник по API

Рекомендации по конвейерам Python

При реализации конвейеров с помощью Python-интерфейса для декларативных конвейеров Lakeflow Spark (SDP) важно обратить внимание на следующие аспекты.

  • SDP несколько раз оценивает код, который определяет конвейер обработки, в процессе планирования и выполнения. Функции Python, определяющие наборы данных, должны содержать только код, необходимый для определения таблицы или представления. Произвольная логика Python, включённая в определения набора данных, может привести к неожиданному поведению.
  • Не пытайтесь реализовать пользовательскую логику мониторинга в определениях набора данных. См. раздел "Определение пользовательского мониторинга конвейеров с помощью перехватчиков событий".
  • Функция, используемая для определения набора данных, должна возвращать кадр данных Spark. Не включайте логику в определения набора данных, которые не связаны с возвращаемым кадром данных.
  • Никогда не используйте методы, которые сохраняют или записывают данные в файлы или таблицы при работе с кодом набора данных в конвейере.

Примеры операций Apache Spark, которые никогда не должны использоваться в коде конвейера:

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

Что случилось @dlt?

Ранее Azure Databricks использовал dlt модуль для поддержки функциональных возможностей конвейера. Модуль dlt заменен модулем pyspark.pipelines . Вы по-прежнему можете использовать dlt, но Databricks рекомендует использовать pipelines.

Различия между DLT, SDP и Apache Spark

В следующей таблице показаны различия в синтаксисе и функциональности между DLT, Lakeflow Spark декларативными конвейерами и декларативными конвейерами Apache Spark.

Area Синтаксис DLT Синтаксис SDP (Lakeflow и Apache, где применимо) Доступно в Apache Spark
Импорты import dlt from pyspark import pipelines (as dpнеобязательно) Да
Потоковая таблица @dlt.table с кадром данных потоковой передачи @dp.table Да
Материализованное представление @dlt.table с пакетным фреймом данных @dp.materialized_view Да
View @dlt.view @dp.temporary_view Да
Поток добавления @dlt.append_flow @dp.append_flow Да
SQL — потоковая передача CREATE STREAMING TABLE ... CREATE STREAMING TABLE ... Да
SQL — материализованные представления CREATE MATERIALIZED VIEW ... CREATE MATERIALIZED VIEW ... Да
SQL — поток CREATE FLOW ... CREATE FLOW ... Да
Журнал событий spark.read.table("event_log") spark.read.table("event_log") нет
Применение изменений (CDC) dlt.apply_changes(...) dp.create_auto_cdc_flow(...) нет
Expectations @dlt.expect(...) dp.expect(...) нет
Непрерывный режим Конфигурация конвейера с непрерывным триггером (то же самое) нет
Sink @dlt.create_sink(...) dp.create_sink(...) Да