news 2026/8/24 14:05:15

【PySpark 学习笔记 一】 PySpark 是什么

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【PySpark 学习笔记 一】 PySpark 是什么

从 Python 开发者视角,快速搞懂 PySpark 的本质和学习路径


本文要点

读完本文,你将了解:

  • Spark 是什么、解决什么问题、覆盖哪些应用场景
  • Scala 与 Spark 的关系,以及学习 PySpark 是否需要掌握 Scala
  • PySpark 的架构原理:Python 与 Spark 如何协同工作
  • Pandas / PySpark / Scala Spark 三者的区别与定位
  • 初学者常见的认知误区
  • 本系列的整体规划与学习路径

一、Spark 基础认知

1.1 Spark 是什么

Apache Spark 是一个开源的分布式计算引擎,用于处理单机无法承载的大规模数据。

当数据量在百 MB 级别时,Python/Pandas 等单机工具即可轻松处理。但当数据量达到 TB 甚至 PB 级别时,单机的内存、存储和计算能力都会成为瓶颈——不仅装不下,就算勉强装下,计算耗时也难以接受。

Spark 的核心思路是分而治之:将数据拆分为多个分片,分发到集群中的多台机器上并行计算,最终汇总结果。

1.2 Spark 的应用场景

大数据领域常见的四类计算场景,Spark 均有对应组件支持:

场景说明典型应用Spark 组件
批处理(Batch)对已存储的海量数据进行周期性计算每日凌晨计算前一日的活跃用户数、GMV 等指标Spark SQL / DataFrame
流处理(Streaming)数据实时到达、实时处理实时监控大屏、实时风控、实时推荐Structured Streaming
图计算(Graph)处理节点与边构成的关系网络数据社交网络好友推荐、风控团伙识别、路径规划GraphFrames
机器学习(ML)模型训练与预测推理用户画像、推荐算法、异常检测MLlib

1.3 Spark 解决的核心问题

问题单机方案的局限Spark 分布式方案
存储容量不足单台机器硬盘容量有限数据分布式存储(HDFS / S3 / OSS 等)
计算能力不足单个 CPU 计算耗时过长数千个 CPU 核并行计算,任务耗时大幅缩短
内存瓶颈中间结果超出内存即报错分布式内存 + 磁盘弹性处理
容错能力弱任务失败需从头重算自动重试与容错,单节点故障不影响整体
技术栈分散每种场景对应一套框架,API 各异同一引擎、同一套 DataFrame API,场景间无缝切换

在 Spark 出现之前,不同大数据场景往往需要不同的计算框架(如 MapReduce 做批处理、Storm 做流处理、Giraph 做图计算、Mahout 做机器学习),各框架的 API、概念、部署方式均不相同,学习和维护成本很高。

Spark 将四类场景统一到同一引擎和同一套 DataFrame API 之下。掌握了 DataFrame,批处理与流处理的开发方式高度相似,图计算和机器学习也基于相同的数据抽象——相当于一台多功能料理机,更换附件即可实现不同功能。

一句话总结 Spark:大数据领域的"并行计算 + 全场景统一引擎"——以集群算力突破单机瓶颈,以统一 API 降低多场景开发成本。


二、Scala 与 Spark

Scala 是一门运行在 JVM 上的编程语言,Spark 的核心代码由 Scala 编写。

Scala 融合了面向对象编程与函数式编程两种范式,可以理解为"Java 的超集 + 函数式编程能力":

特性JavaScala
运行环境JVMJVM(与 Java 完全兼容,可互相调用)
编程范式以面向对象为主面向对象 + 函数式,两者融合
语法简洁度样板代码较多简洁(类型推断、高阶函数、case class 等)
函数地位非一等公民(需接口/匿名类)一等公民(可作为参数和返回值)
不可变数据支持但使用繁琐原生支持,语法简洁
集合操作循环 / Stream API高阶函数(map、filter、flatMap)表达力强

Spark 选择 Scala 主要有三方面原因:函数式编程天然适配数据处理的表达模式、与 Java 生态无缝互通、兼顾类型安全与语法简洁。

学习 PySpark 需要掌握 Scala 吗

不需要。PySpark 开发全程使用 Python,Scala 仅作为 Spark 底层实现语言存在,了解"Spark 基于 Scala 开发、运行在 JVM 上"即可,无需深入学习 Scala。


三、PySpark 是什么

PySpark = Python + Spark,即通过 Python API 编写 Spark 程序。

Spark 本身是基于 Scala、运行在 JVM 上的分布式计算引擎。PySpark 是 Spark 官方提供的 Python 绑定,使得开发者无需学习 Scala,通过 Python 即可调用 Spark 的全部能力。调用链路为:Python 代码 → PySpark API → Py4J 通信桥 → JVM(Spark 核心引擎)→ 分布式计算

PySpark的运行架构

可以这样理解:Python 是"交互层",Spark 是"计算核心"。开发者用 Python 描述计算逻辑,真正的分布式计算由 JVM 上的 Spark 引擎完成。两者的关系更接近于"客户端 + 服务端":


关键要点:

  1. Driver 端运行在 Python 进程:主程序运行于 Python 进程,SparkSessionDataFrame等对象是对 JVM 端对象的 Python 包装
  2. 计算执行于 JVM:真正的分布式计算全部在 JVM 的 Executor 进程中完成
  3. Py4J 是通信桥梁:Python 通过 Py4J 库与 JVM 进行跨进程通信,调用 Java 侧的方法(思路上类似于 JDBC 连接数据库——都是通过一个"桥"跨进程调用另一端的能力,区别在于 JDBC 传 SQL 语句,Py4J 传方法调用指令)
  4. 数据传输存在开销:Python 与 JVM 之间的数据传递需要序列化/反序列化,这是 Python UDF 性能低于原生函数的根本原因

实践原则:优先使用 Spark 内置函数(selectfiltergroupBy等),尽量减少 Python UDF 的使用——内置函数直接运行于 JVM 内部,而 UDF 需要跨进程数据传输,性能差距显著。

PySpark 的核心组件

Spark 是一个综合性的大数据计算平台,PySpark 完整覆盖了其主要组件:

组件功能定位使用场景
Spark Core核心引擎,提供 RDD、任务调度、内存管理等基础能力底层基础设施,一般不直接编写 RDD 程序
Spark SQL结构化数据处理,提供 DataFrame API 与 SQL 接口最常用,覆盖 90% 以上的场景
Spark Streaming基于微批的流处理实时数据处理(较老的 API)
Structured Streaming基于 SQL API 的新一代流处理实时数据处理(推荐使用)
MLlib机器学习库特征工程、模型训练
GraphFrames图计算(Python 版)图分析场景,使用频次较低

入门阶段应将重点放在 Spark SQL(DataFrame API + SQL)上,其余组件先建立认知即可。


四、三者对比:Pandas / PySpark / Scala Spark

Pandas 是什么

Pandas 是 Python 生态中最流行的结构化数据分析库,可以理解为"Python 版的 Excel"——通过代码操作表格数据。

Pandas 提供了数据读写、清洗、筛选、聚合、合并、时间序列处理、可视化等一整套数据分析能力,是数据科学领域的基础工具。其核心数据结构 DataFrame(二维表格)与 SQL 的表、Excel 的工作表在概念上高度一致。

为了更清晰地定位 PySpark,这里将其与最常见的两个参照对象——Pandas 和 Scala Spark 放在一起对比:

维度PandasPySpark(Python)Scala Spark
运行环境单机进程Python Driver + JVM Executor(分布式)纯 JVM(分布式)
数据规模单机内存可承载(百万~千万行)亿~万亿行,不受单机限制同 PySpark
执行模式立即执行(Eager)惰性执行(Lazy)惰性执行(Lazy)
学习曲线中低
生态优势数据科学工具最丰富(NumPy、sklearn 等)数据科学 + 大数据,两头都能接大数据原生生态最强
性能小数据快,大数据直接 OOMDataFrame/SQL 接近原生,UDF 有损耗原生最优
典型岗位数据分析师、算法工程师数据开发、数据分析、算法大数据平台、基础设施
适用场景探索分析、中小数据量、快速原型大规模数据处理 + 数据科学全流程大规模数据处理、平台建设

对于具备 Java 与 SQL 基础、从事数据开发或数据分析方向的开发者,PySpark 是投入产出比最高的选择——既拥有 Python 生态的便利性,又能处理大规模数据。

性能说明

日常使用的 DataFrame API 和 SQL,底层均经由 Spark 的 Catalyst 优化器和 Tungsten 执行引擎处理,Python 与 Scala 在这类场景下性能差异极小。仅在大量使用 Python UDF 的场景下才会出现明显的性能差距,而这类场景在实际工作中占比不高,大多数需求通过内置函数即可满足。

Python 生态优势的价值

并非所有逻辑都运行在 JVM 上,Python 生态的价值体现在计算之外的多个环节:

  • 开发体验:Jupyter Notebook 交互式开发、边写边验证,探索式分析效率远高于 Scala
  • 数据科学:Pandas 小样本快速验证 + sklearn/XGBoost/PyTorch 等模型训练,形成"Spark 做特征 + Python 做模型"的经典组合
  • 可视化:Matplotlib、Seaborn、Plotly 等丰富的可视化库,数据分析汇报不可或缺
  • 上下游对接:API 调用、报表生成、邮件推送、业务系统对接等周边工作,Python 生态成熟度远高于 Scala

五 常见认知误区

初学者对 PySpark 常有以下误解,在此一并澄清:

误区事实
PySpark 就是把 Spark 翻译成了 Python不是翻译,是跨进程通信。Python 端只是"壳",计算核心在 JVM 上,两者通过 Py4J 通信
Python 写的 Spark 肯定比 Scala 慢很多DataFrame/SQL 场景下性能几乎一样,都走 Catalyst 优化器。只有大量 Python UDF 才会有明显差距
学 PySpark 得先学 Scala不需要。全程用 Python 开发即可,Scala 仅作为底层实现存在
会 Pandas 就等于会 PySpark操作思路相似,但底层本质完全不同——一个单机、一个分布式,一个立即执行、一个惰性执行
PySpark 的生态不如 Scala 丰富大数据原生生态 Scala 更强,但数据科学和周边工具生态 Python 优势明显

六 前置知识要求

知识领域是否必需说明
Python 基础必需变量、函数、类、列表、字典等基础语法
SQL 基础必需增删改查、聚合、join、子查询
Java 基础加分项有助于理解 JVM 与分布式概念
Pandas 经验非必需有相关经验可加速上手,没有也不影响
Scala非必需PySpark 开发完全不需要
分布式经验非必需可在学习过程中逐步理解

七 后续系列规划

本系列共7 篇,从零开始构建 PySpark 知识体系:

篇序主题核心内容状态
00PySpark 概述Spark 基础、Scala 简介、PySpark 架构、核心组件、学习路径✅ 本篇
01核心概念扫盲RDD / DataFrame / Dataset 的关系、Driver / Executor / 分区 / DAG、惰性执行待写
02DataFrame API 入门SparkSession、数据读写(CSV/JSON/Parquet/JDBC)、基本操作(select/filter/groupBy/agg/orderBy/join)、列操作、空值处理、去重与采样待写
03DataFrame 进阶多表 join、聚合函数、窗口函数(row_number/rank/sum over)、复杂数据类型待写
04Spark SQL临时视图与全局视图、SQL 查询 DataFrame、内置函数大全、UDF 原理与使用待写
05性能调优入门Shuffle 机制、缓存与持久化(cache/persist/checkpoint)、分区管理、广播变量、数据倾斜识别与处理待写
06实战篇数据清洗实战、指标开发实战(多维度聚合 / TopN / 同比环比)、Notebook 开发流程待写

下一篇预告:核心概念扫盲——将详细学习 RDD、DataFrame、Dataset 的演进关系,以及 Driver、Executor、分区、DAG、惰性执行等 Spark 核心概念。建议在掌握本篇 Spark 基础认知的基础上继续阅读。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/24 14:04:50

SAP Gateway OData V4 的 NULL 语义,别再把空值、NULL 和字段缺失当成一回事

在 SAP Gateway Foundation 的 OData V4 开发里,有一类问题很容易在接口联调阶段被低估。ABAP 结构里的某个字段明明是 initial,序列化到 OData 响应以后,业务方却希望看到 null。另一个字段虽然在 ABAP 里也没有实际内容,但业务方要求它根本不要出现在 payload 里。再换到…

作者头像 李华
网站建设 2026/8/24 14:04:15

LaTeX的基本应用

一、认识Latex模板 1.注释:% Latex文件注释时使用“%”,在一行中“%”号后面的内容均会被注释掉,生成PDF文件时不会显示 2.命令或特殊符号:\ “\”符号出现,表示这是一个命令或者特殊符号 作为特殊符号时&#xf…

作者头像 李华
网站建设 2026/8/24 14:04:09

SAP Gateway OData V4 增量同步机制深度解析,从 odata.track-changes 到 @odata.deltaLink

一个运行中的 SAP Fiori 应用次乃至一天几十次刷新时,怎样避免把几乎没有变化的整份数据重新传输一遍。 以销售订单列表为例。上午 9 点,客户端从 SAP S/4HANA 读取了 5 万条订单。上午 9 点 10 分,真正发生变化的可能只有 37 条。如果客户端再次执行同样的完整查询,SAP G…

作者头像 李华
网站建设 2026/8/24 14:02:29

不写代码的自动化:我这一周用自然语言干掉的 5 类重复工作

不写代码的自动化:我这一周用自然语言干掉的 5 类重复工作 最近深度使用了两个 AI 办公平台三个月,确实把日常工作效率拉起来了。这周做了一次实验:把日常重复性工作全部交给 AI 自动化工具处理,记录一下真实结果。 一、我干掉了哪…

作者头像 李华