当前位置:首页>python>Python库巡礼--PySpark

Python库巡礼--PySpark

  • 2026-09-10 11:15:12
Python库巡礼--PySpark
Python的第三方库生态非常强大,涉及数据分析,机器学习,Web开发,可视化,自然语言,图像处理,自动化办公等。通过pip等包管理工具快速安装和升级,大幅提升了开发效率,并推动了跨学科应用的普及!
今天我们看下PySpark,基于 Apache Spark 构建,能够高效地运行在集群环境中,支持 TB 级别的数据处理任务,具备强大的分布式计算能力。它允许开发者使用 Python 语言编写分布式数据处理程序,完美结合了 Python 的易用性和 Spark 的大数据处理能力。
PySpark 的发展历程也反映了大数据处理从“离线批处理”向“实时、智能、易用”的转变:

时间

版本/阶段

2010 年 Spark 诞生

Spark 项目在加州大学伯克利分校开源,PySpark 作为早期实验性接口出现,主要基于 RDD。

2014 年 Spark 1.0

RDD 时代。PySpark 功能逐渐完善,但性能受限于 Python 与 JVM 之间的序列化开销,优化器支持较弱。

2016 年 Spark 2.0

里程碑版本。引入 DataFrame API 和 Catalyst 优化器。PySpark 代码可享受 SQL 级优化,性能大幅提升,成为主流用法。

2020 年 Spark 3.0

Pandas 集成。引入 Pandas API on Spark,允许用户像使用 Pandas 一样操作大数据;优化 Arrow 格式,减少序列化开销。

2022 年 Spark 3.3+

云原生与 AI。增强对 Kubernetes 的支持;pyspark.pandas 正式成为标准组件;更好地支持机器学习工作流。

✅ 核心优势

优势

说明

易用性

语法简洁,拥有庞大的 Python 数据科学生态库支持。

高性能

基于内存计算,比 Hadoop MapReduce 快 10-100 倍;支持 DAG 有向无环图优化。

可扩展性

轻松从单机扩展到数千台节点的集群,处理 PB 级数据。

多功能性

批处理、流处理、SQL、机器学习、图计算全支持。

容错性

基于 RDD 的血缘机制,节点故障时可自动恢复数据。

❌ 主要劣势

劣势

说明

小数据 overhead

启动 Spark 上下文需要时间,处理小数据(<1GB)时不如 Pandas 快。

调试复杂

分布式环境下的报错堆栈往往很长,定位 Python 端的具体错误有时较难。

序列化开销

尽管有 Arrow 优化,但在涉及复杂 Python 对象(如自定义类)传输时,仍有性能损耗。

资源消耗

默认占用较多内存,不适合资源极其受限的边缘设备。

下面是一些简单代码示例

示例 1:创建数据并进行基础转换

from pyspark.sql import SparkSessionfrom pyspark.sql.functions import col, sum as _sum# 1. 初始化 SparkSession (入口点)spark = SparkSession.builder \    .appName("SimplePySparkDemo") \    .master("local[*]") \    .getOrCreate()# 2. 创建简单的 DataFrame (模拟读取数据)data = [    ("Alice", "Sales", 3000),    ("Bob", "Sales", 4000),    ("Charlie", "IT", 5000),    ("David", "IT", 4500),    ("Eve", "HR", 3500)]columns = ["Name", "Department", "Salary"]df = spark.createDataFrame(data, columns)print("--- 原始数据 ---")df.show()# 3. 数据转换:过滤 (Filter) 和 选择 (Select)# 只保留工资大于 4000 的员工high_salary_df = df.filter(col("Salary") > 4000).select("Name", "Salary")print("--- 工资大于 4000 的员工 ---")high_salary_df.show()# 4. 数据聚合:按部门分组求和 (GroupBy)dept_salary_df = df.groupBy("Department").agg(_sum("Salary").alias("Total_Salary"))print("--- 各部门工资总和 ---")dept_salary_df.show()# 5. 停止 Spark 会话spark.stop()
经常用SQL的小伙伴们看到select,groupby就不会陌生了吧~接下来,看个更熟悉的~

示例 2:使用 SQL 查询

PySpark 允许你注册临时表,然后直接用 SQL 语句查询。看下面第13行代码,直接就是原生SQL语法,这对熟悉 SQL 的小伙伴们可以说是非常友好了!

from pyspark.sql import SparkSessionspark = SparkSession.builder.appName("SQLDemo").master("local[*]").getOrCreate()# 创建数据data = [("2023-01-01", 100), ("2023-01-02", 150), ("2023-01-03", 200)]df = spark.createDataFrame(data, ["Date", "Volume"])# 注册为临时视图df.createOrReplaceTempView("trades")# 使用 SQL 查询result = spark.sql("SELECT * FROM trades WHERE Volume > 120")print("--- SQL 查询结果 ---")result.show()spark.stop()

过往文章/合集

合集

文章

Python编程小技巧

Python编程小技巧--用Python查询天气

Python编程小技巧--‌自制简易系统监控

Python--数据/图像可视化

Python编程小技巧--雷达图

报表"不直观"?20行Python代码做出高颜值KPI仪表盘,惊艳全场!

Python编程基础算法

Python编程基础算法--斐波那契数列的矩阵算法

Python编程基础算法--LeetCode编辑距离问题

细数那些经典教材

细数那些经典教材--算法与数据结构

细数那些经典教材--编程竞赛

细数那些经典教材--机器学习入门就劝退?这几本“神书”帮你少走弯路!

Python库巡礼

Python库巡礼--DuckDB

Python库巡礼--Dask

Python与数学之美

Python与数学之美--黄金螺线

Python与数学之美--摆线/旋轮线(Cycloid)

Python与数学之美--星形线(来自300年前的"完美曲线")

Python与办公自动化
Python与办公自动化--批量生成报告/通知
月底加班到10点?Python 30秒搞定100个Excel的合并/拆分(附完整代码)

最新文章

随机文章