尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

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

【PySpark 学习笔记 一】 PySpark 是什么 从 Python 开发者视角快速搞懂 PySpark 的本质和学习路径本文要点读完本文你将了解Spark 是什么、解决什么问题、覆盖哪些应用场景Scala 与 Spark 的关系以及学习 PySpark 是否需要掌握 ScalaPySpark 的架构原理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模型训练与预测推理用户画像、推荐算法、异常检测MLlib1.3 Spark 解决的核心问题问题单机方案的局限Spark 分布式方案存储容量不足单台机器硬盘容量有限数据分布式存储HDFS / S3 / OSS 等计算能力不足单个 CPU 计算耗时过长数千个 CPU 核并行计算任务耗时大幅缩短内存瓶颈中间结果超出内存即报错分布式内存 磁盘弹性处理容错能力弱任务失败需从头重算自动重试与容错单节点故障不影响整体技术栈分散每种场景对应一套框架API 各异同一引擎、同一套 DataFrame API场景间无缝切换在 Spark 出现之前不同大数据场景往往需要不同的计算框架如 MapReduce 做批处理、Storm 做流处理、Giraph 做图计算、Mahout 做机器学习各框架的 API、概念、部署方式均不相同学习和维护成本很高。Spark 将四类场景统一到同一引擎和同一套 DataFrame API 之下。掌握了 DataFrame批处理与流处理的开发方式高度相似图计算和机器学习也基于相同的数据抽象——相当于一台多功能料理机更换附件即可实现不同功能。一句话总结 Spark大数据领域的并行计算 全场景统一引擎——以集群算力突破单机瓶颈以统一 API 降低多场景开发成本。二、Scala 与 SparkScala 是一门运行在 JVM 上的编程语言Spark 的核心代码由 Scala 编写。Scala 融合了面向对象编程与函数式编程两种范式可以理解为Java 的超集 函数式编程能力特性JavaScala运行环境JVMJVM与 Java 完全兼容可互相调用编程范式以面向对象为主面向对象 函数式两者融合语法简洁度样板代码较多简洁类型推断、高阶函数、case class 等函数地位非一等公民需接口/匿名类一等公民可作为参数和返回值不可变数据支持但使用繁琐原生支持语法简洁集合操作循环 / Stream API高阶函数map、filter、flatMap表达力强Spark 选择 Scala 主要有三方面原因函数式编程天然适配数据处理的表达模式、与 Java 生态无缝互通、兼顾类型安全与语法简洁。学习 PySpark 需要掌握 Scala 吗不需要。PySpark 开发全程使用 PythonScala 仅作为 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 通信桥 → JVMSpark 核心引擎→ 分布式计算。PySpark的运行架构可以这样理解Python 是交互层Spark 是计算核心。开发者用 Python 描述计算逻辑真正的分布式计算由 JVM 上的 Spark 引擎完成。两者的关系更接近于客户端 服务端关键要点Driver 端运行在 Python 进程主程序运行于 Python 进程SparkSession、DataFrame等对象是对 JVM 端对象的 Python 包装计算执行于 JVM真正的分布式计算全部在 JVM 的 Executor 进程中完成Py4J 是通信桥梁Python 通过 Py4J 库与 JVM 进行跨进程通信调用 Java 侧的方法思路上类似于 JDBC 连接数据库——都是通过一个桥跨进程调用另一端的能力区别在于 JDBC 传 SQL 语句Py4J 传方法调用指令数据传输存在开销Python 与 JVM 之间的数据传递需要序列化/反序列化这是 Python UDF 性能低于原生函数的根本原因实践原则优先使用 Spark 内置函数select、filter、groupBy等尽量减少 Python UDF 的使用——内置函数直接运行于 JVM 内部而 UDF 需要跨进程数据传输性能差距显著。PySpark 的核心组件Spark 是一个综合性的大数据计算平台PySpark 完整覆盖了其主要组件组件功能定位使用场景Spark Core核心引擎提供 RDD、任务调度、内存管理等基础能力底层基础设施一般不直接编写 RDD 程序Spark SQL结构化数据处理提供 DataFrame API 与 SQL 接口最常用覆盖 90% 以上的场景Spark Streaming基于微批的流处理实时数据处理较老的 APIStructured Streaming基于 SQL API 的新一代流处理实时数据处理推荐使用MLlib机器学习库特征工程、模型训练GraphFrames图计算Python 版图分析场景使用频次较低入门阶段应将重点放在 Spark SQLDataFrame API SQL上其余组件先建立认知即可。四、三者对比Pandas / PySpark / Scala SparkPandas 是什么Pandas 是 Python 生态中最流行的结构化数据分析库可以理解为Python 版的 Excel——通过代码操作表格数据。Pandas 提供了数据读写、清洗、筛选、聚合、合并、时间序列处理、可视化等一整套数据分析能力是数据科学领域的基础工具。其核心数据结构 DataFrame二维表格与 SQL 的表、Excel 的工作表在概念上高度一致。为了更清晰地定位 PySpark这里将其与最常见的两个参照对象——Pandas 和 Scala Spark 放在一起对比维度PandasPySparkPythonScala 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 基础认知的基础上继续阅读。
返回列表