在 Microsoft Fabric 中的 Python 和 PySpark Notebook 之间进行选择

随着 Microsoft Fabric 中的轻型 Python Notebook 的引入,客户现在有两个可靠的选项用于生成和缩放分析工作流:Python Notebook 和 PySpark Notebook。 虽然两者都提供熟悉的 Notebook 界面,但它们在管理计算资源、可伸缩性和成本效益的方式方面存在显著差异。

Fabric 简化了在笔记本类型之间进行选择或转换的过程,使数据专业人员能够针对敏捷性、性能和预算进行优化。 本指南旨在帮助你评估最适合当前需求的笔记本,以及如何随着工作负载的复杂性和规模的增长而改进方法。 “启动池”提供预热的计算容器,使得 Python 或 PySpark 笔记本能够实现几乎即时的启动。

快速决策矩阵 - 快速选择

非常适合根据工作负荷类型进行快速选择。

使用此高级参考快速确定最适合常见工作负荷模式的笔记本类型。 此表最适合用于早期规划和体系结构评审。

情景 推荐的笔记本
包括预安装的 DuckDB 和 Polars 库 Python 笔记本
小型到中型数据(适合内存中) Python 笔记本(或单节点 Spark 集群上的 PySpark)
快速探索和原型制作 Python 笔记本(或单节点 Spark 集群上的 PySpark)
超过内存的大型数据集(10GB+) PySpark 笔记本
复杂数据工作流或 ETL 管道 PySpark 笔记本
高并发或并行执行 PySpark 笔记本
需要 Spark 原生 API(MLlib、SQL、流式处理) PySpark 笔记本

关键方案的快速摘要 - 深入比较

使用此结构化比较表来理解不同类型笔记本电脑在结构和操作上的权衡。 最适合用于工程评估或实施规划。

执行和性能

情景 Python 笔记本(2 核 VM) PySpark Notebooks (Spark 计算引擎)
启动时间 内置启动池大约在 5 秒内初始化,而按需启动池大约需要 3 分钟。 启动时间范围从大约 5 秒(启动池)到几分钟(按需 Spark 集群)。
快速转换和 API 调用 适用于中小型数据集(最多 1GB) 使用矢量化执行针对大型数据集进行优化。
中等工作负荷 未针对接近内存饱和的数据大小进行优化 能够高效通过分布式计算进行扩展。
处理大型数据集 受单节点内存限制。 可能难以进行缩放。 分布式处理可确保对多 GB 到 TB 工作负荷的可缩放处理。
High-Concurrency 执行 每个笔记本的手动 FIFO 样式并行度 采用系统托管的并发机制,支持并行执行。
资源自定义和缩放 固定计算(2 核 VM):不自动缩放。 用户可以在笔记本中通过 %%config 手动扩展容量。 灵活的资源分配;支持自动缩放和自定义 Spark 配置。

工作流和业务流程

情景 Python 笔记本(2 核 VM) PySpark Notebooks (Spark 计算引擎)
API 编排 对轻型业务流程和控制流(尤其是基于 REST/gRPC 的集成)有效 由于启动时间较长和分布式开销,进行基础编排任务时效果较不理想。
复杂 ETL DAG 仅限于单个节点上的顺序 (FlFO) 任务执行,不支持并行处理。 支持使用 FlFO 或 FAlR 计划在 DAG 中执行并发任务,从而为复杂的 ETL 工作流启用高效的并行处理。

平台和库支持

情景 Python 笔记本(2 核 VM) PySpark Notebooks (Spark 计算引擎)
图书馆访问 在多个运行时环境中提供强大的 Python 库支持;但对 Spark 原生库的访问有限,可能需要手动进行集成。 完全支持 MLlib、Spark SQL、PySpark 和 Spark 流式处理。
Delta Lake 处理过程 Python Notebook 运行时附带预安装的 deltasduckdb 库,支持读取和写入 Delta Lake 数据。 但是,某些 Delta Lake 功能可能仍不受支持。 完全支持本地兼容性。

生产与企业就绪情况

情景 Python 笔记本(2 核 VM) PySpark Notebooks (Spark 计算引擎)
生产管理 有限的生产功能;不支持环境变量。 支持使用环境变量的生产工作流、通过环境项进行库管理以及基于项的部署。

成本注意事项

情景 Python 笔记本(2 核 VM) PySpark Notebooks (Spark 计算引擎)
成本概况 较低的初始成本(最低 2 个 vCore):最适合轻型临时工作负荷。 较高的初始成本(最低 4 个 vCore):专为可缩放的企业级工作负载而设计。 自动缩放可以降低成本,这可能会导致总拥有成本降低(TCO)。

使用 Python 还是 PySpark 编程笔记本的时机

Fabric Notebook 为各种用户和工作负载提供了灵活性。 本部分可帮助你评估哪些笔记本类型最符合当前和将来的需求。

使用 Python Notebook 进行快速迭代、经济高效的分析和交互式开发。 这些库非常适合较小的数据集,并且对诸如 DuckDB 和 Polars 这样的库提供原生支持。

PySpark Notebooks 用于分布式计算、生产级 ETL 工作流,或在高并发性和 Spark 原生 API 至关重要的情况下使用。

在以下情况下选择 Python 笔记本:

  • 在轻型 2 核容器上需要快速启动(通常在几秒钟内)。
  • 如果最小化计算成本是优先级 - 用于交互式分析或计划的微作业。
  • 你希望可以立即访问通过 pip 安装的库,以及预安装的 DuckDB 和 Polars。
  • 需要跨不同的 Python 运行时版本进行测试。
  • 数据可以完全容纳在单个节点的内存中。

在以下情况下选择 PySpark 笔记本:

  • 工作负荷超出了单个节点的内存或计算限制。
  • 你需要高并发池才能在多个笔记本中运行并行作业。
  • 使用 FAIR 或 FIFO 调度协调复杂的 ETL 管道。
  • 你依赖于 Spark 原生 API,例如 MLlib、Spark SQL 或 Spark Streaming。
  • 需要生产级功能,例如环境变量和基于项的库管理。

主要差异一目了然 - 简明概述

请参阅本指南末尾的术语表,了解 VORDER、NEE 和 Items-Based 库管理等术语的定义。

本部分提供 Python 和 PySpark Notebook 之间基本技术和体系结构差异的快速参考。

类别 Python 笔记本 PySpark 笔记本
计算运行时 轻型容器(2 核 VM) Spark 群集(单节点或高并发池)
启动时间 即刻启动(通过启动池在数秒内完成) 启动时间从大约 5 秒(通过启动池)到几分钟(使用按需启动的 Spark 集群时)。
成本概况 成本更低;非常适合短任务和原型制作 成本较高;适用于可缩放且长时间运行的任务负荷
Python/Spark 版本控制 可用的多个 Python 版本 绑定到特定的 Spark 运行时版本
自定义库 安装资源文件夹 pip install + 资源文件夹 + 环境项
Fabric Spark 功能 对 Spark 引擎功能的有限访问 完全访问权限:NEE、Autotune、VORDER、Vegas Cache
Delta Lake 兼容性 部分兼容;潜在的性能问题 完全支持和优化

改进工作负荷:从 Python 到 PySpark

Fabric 笔记本旨在应对工作负荷复杂性的增加。 本部分概述了如何将笔记本策略从简单的浏览扩展到分布式数据处理。

阶段 推荐的笔记本 触发器条件
启动 Python 笔记本(2 核) 小型交互式工作负载
纵向扩展 Python 笔记本 (手动切换到更大的虚拟机) 内存或CPU使用接近上限
横向扩展 PySpark 笔记本 (手动切换到 Spark 池) 需要分布式计算或并行执行

小窍门

转换到 PySpark 时,请确保代码使用与 Spark 兼容的语法。 在部署到生产环境之前,在 Spark 环境中验证工作负荷。

概要

Python Notebooks 支持内核操作,例如中断和重启内核,从而加速交互式开发。 它们非常适合用于快速、经济高效地分析小型到中型数据集,并擅长原型制作、试验和轻型计划任务。

随着数据量和复杂性的增加,PySpark Notebook 提供大规模企业分析所需的分布式计算能力和生产级功能。 选择正确的笔记本是一个不断发展的过程。 选择满足您当前需求的最简单选项,并随着数据环境的扩大进行扩展。

有关 NEE、VORDER 和拉斯维加斯缓存等术语的说明,请参阅最后一页上的术语表。

术语表

  • Item-Based 库管理:在环境项中管理版本化包和生产库。
  • Delta Lake 的兼容性:对 Delta 表的跨环境支持,在 PySpark 中得到全面支持。
  • FAIR 调度策略:一种在并发 Spark 作业中公平分配资源的调度策略。
  • FIFO 调度:作业调度中先进先出的First-Out 执行顺序。
  • NEE (本机执行引擎):Fabric Spark 特有的优化查询引擎。
  • Spark 池:用于运行分布式 Spark 工作负荷的共享计算资源。
  • VORDER:矢量化查询执行路径的构造优化。
  • 矢量化加速:使用向量作批量处理数据以提高性能。
  • 拉斯维加斯缓存:内存中缓存,可加快重复 Spark 数据访问的速度。