Lakeflow Spark 声明性管道 Python 语言参考

本部分提供了 Lakeflow Spark 声明性管道(SDP)Python 编程接口的详细信息。

pipelines 模块概述

Lakeflow Spark 声明性管道 Python 函数在 pyspark.pipelines 模块中定义(导入为 dp)。 使用 Python API 实现的管道必须导入此模块:

from pyspark import pipelines as dp

注释

管道模块仅在管道上下文中可用。 它在管道外部运行的 Python 中不可用。 有关编辑管道代码的详细信息,请参阅 使用 Lakeflow 管道编辑器开发和调试 ETL 管道

Apache Spark™ 管道

Apache Spark 包括从 Spark 4.1 开始的 声明性管道 ,可通过模块 pyspark.pipelines 使用。 Databricks Runtime 使用其他 API 和集成扩展这些开源功能,以供托管生产使用。

使用开源 pipelines 模块编写的代码在 Azure Databricks 上运行,无需修改。 以下功能不属于 Apache Spark:

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

pipelines 模块以前在 Azure Databricks 中称为 dlt。 如需详细信息以及更多关于与 Apache Spark 的差异的信息,请参阅 发生了什么 @dlt

用于定义数据集的函数

管道使用 Python 修饰器来定义具体化视图和流式处理表等数据集。 请参阅 Functions 来定义数据集

API 参考

Python 管道注意事项

使用 Lakeflow Spark 声明性管道(SDP)Python 接口实现管道时,需要注意以下重要事项:

  • 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 pipelinesas dp(可选) 是的
流式处理表 @dlt.table 配合流式数据框 @dp.table 是的
具体化视图 @dlt.table 使用批量数据帧 @dp.materialized_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(...) 是的