
【作者主页】Francek Chen
【专栏介绍】⌈ ⌈ ⌈PySpark大数据分析与应用 ⌋ ⌋ ⌋ PySpark作为Apache Spark的Python API,融合Python易用性与Spark分布式计算能力,专为大规模数据处理设计。支持批处理、流计算、机器学习 (MLlib) 和图计算 (GraphX),通过内存计算与弹性数据集 (RDD) 优化性能,提供DataFrame API和SQL接口简化结构化数据处理。可跨Hadoop/云平台部署,适用于ETL、日志分析、实时推荐等场景,具备TB级数据横向扩展能力,并与Pandas等Python工具无缝集成,兼顾高效分析与易用性。
【GitCode】专栏资源保存在我的GitCode仓库:https://gitcode.com/Morse_Chen/PyTorch_deep_learning。
文章目录
-
- 前言
- 一、PySpark简介
- 二、PySpark子模块
-
- (一)PySpark公共类
- [(二)PySpark SQL模块](#(二)PySpark SQL模块)
- [(三)PySpark Streaming模块](#(三)PySpark Streaming模块)
- 小结
前言
Spark主要由Scala和Java语言开发,运行在Java虚拟机(Java Virtual Machine,JVM)中。除了提供Scala、Java开发接口外,Spark还为Python、R等语言提供了开发接口。PySpark是Spark为Python开发者提供的API,使得Python开发者在Python环境下可以运行Spark程序。
一、PySpark简介
Python在数据分析和机器学习领域拥有丰富的库资源,如NumPy、SciPy、Pandas和Scikit-learn等,因此成为数据科学家和数据分析师处理和分析数据的热门语言。Spark是目前处理和使用大数据的主流框架之一,其设计初衷是加速迭代计算,非常适合大数据分析、机器学习等应用场景。为了兼顾Spark和Python的优势,Apache Spark开源社区推出了PySpark。
与原生Python相比,PySpark的优势在于其能够运行在集群上,而不仅仅局限于单机环境。因此,当数据量过大以至于单机无法处理,或数据存储在HDFS中,或需要进行分布式/并行计算时,可以选择使用PySpark。
二、PySpark子模块
PySpark组成部分包括:一组公共类、处理结构化数据的SQL模块、处理流数据的Streaming模块、机器学习的MLlib和ML两个包。PySpark类、模块与包如图1所示。
图1 PySpark类、模块与包
PySpark的核心类组成:公共类中的SparkContext、RDD;pyspark.streaming模块中的StreamingContext、DStream;pyspark.sql模块中的SparkSession、DataFrame。PySpark的核心类说明如表1所示。
表1 PySpark的核心类说明
类型 | 类名 | 说明 |
---|---|---|
公共类 | pyspark.SparkContext |
PySpark编程的主要入口点 |
公共类 | pyspark.RDD |
PySpark数据抽象 |
Streaming模块 | pyspark.streaming.StreamingContext |
PySpark流编程主要入口点 |
Streaming模块 | pyspark.streaming.DStream |
PySpark流数据抽象 |
SQL模块 | pyspark.sql.SparkSession |
PySpark SQL编程入口点 |
SQL模块 | pyspark.sql.DataFrame |
处理结构化数据 |
(一)PySpark公共类
PySpark中11个公共类:Accumulator、Broadcast、RDD、SparkConf、SparkContext、SparkFiles、StorageLevel、TaskContext、RDDBarrier、BarrierTaskContext和BarrierTaskInfo。PySpark公共类的简要说明如表2所示。
表2 PySpark公共类的简要说明
类名 | 说明 |
---|---|
Accumulator | 累加器,只允许增加值 |
Broadcast | 广播变量,可用于在任务之间复用 |
RDD | PySpark中基础抽象 |
SparkConf | 用于PySpark应用程序的参数配置 |
SparkContext | PySpark应用程序的编程入口点 |
SparkFiles | 提供对文件进行操作的相关功能 |
StorageLevel | 用于数据存储级别的设置 |
TaskContext | 可以提供关于当前运行任务的信息 |
RDDBarrier | 用屏障包装RDD以实现屏障执行 |
BarrierTaskContext | 为屏障执行提供额外信息和工具 |
BarrierTaskInfo | 与屏障作业有关的信息 |
1. SparkContext编程入口
PySpark主要公共类SparkContext详解如下。
(1)功能入口:SparkContext是所有Spark功能的入口点,是运行任何Spark应用程序时必须初始化的对象。在编写PySpark程序时,首先需要创建一个SparkContext实例,传入一个SparkConf对象作为参数。通过这个SparkContext实例,可以提交作业、分发任务,并进行应用的注册。
(2)驱动程序:当运行一个Spark应用程序时,会启动一个驱动程序,其中包含main函数。SparkContext会在驱动程序中启动,并在工作节点上的executor中运行操作。
(3)连接集群:SparkContext表示与Spark集群的连接,它是创建RDD(弹性分布式数据集)和广播变量的基础。
(4)默认实例:默认情况下,PySpark将SparkContext实例命名为'sc'
,因此在大多数情况下,可以直接使用这个名字来访问SparkContext的实例。
(5)数据操作:提供了许多用于操作RDD的方法,例如map、filter、reduce等,使得对数据的操作变得简单高效。支持广播变量,可以被缓存在每台机器上,以便在每个任务中快速访问而无需通过网络传输。
2. SparkConf配置对象
PySpark主要公共类SparkConf配置管理详解如下。SparkConf是PySpark中用于设置和管理Spark应用程序参数的关键类,允许开发者定制应用程序行为,以适应不同的需求和环境。
(1)创建SparkConf对象:通过调用SparkConf()
构造函数创建新的SparkConf对象。构造函数接受可选的字典参数来指定默认配置选项。
(2)加载系统属性: SparkConf自动从Java系统属性中加载所有以spark.
为前缀的属性。
(3)设置和获取配置选项: 使用set(key, value)
方法设置配置选项。使用get(key)
方法获取配置选项的值。尝试获取未设置的配置选项会抛出异常。
(4)优先级规则: 使用set()
方法设置的配置值优先于从系统属性中加载的值。
(5)不可变性和传递性: 创建后,SparkConf对象不可修改,确保配置在应用程序生命周期中保持一致。创建SparkContext时需传入SparkConf对象,以便初始化和运行应用程序。
3. PySpark广播变量与累加器
PySpark主要公共类广播变量与累加器详解如下。广播变量和累加器是两种用于并行处理的共享变量,它们在集群的每个节点上都有副本,可以用于执行任务。
(1)广播变量:广播变量主要用于在节点间高效分发大对象。当需要在多个节点上使用相同的数据时,广播变量可以将数据缓存在所有计算机上,而不是每次任务执行时都发送数据,这样可以减少数据传输的开销。使用SparkContext.broadcast()
方法创建广播变量,并且在节点上的数据是不可变的,这意味着一旦广播变量被创建,就不能在节点上修改它的值。
(2)累加器:累加器用于对信息进行聚合,主要用于累计计数等场景。它们是可变的,可以在并行任务中进行增量更新。使用SparkContext.accumulator()
方法创建累加器,并且可以通过+=操作符进行累加。需要注意的是,累加器的值只能在驱动程序中访问,而不能在executor中访问。
总的来说,广播变量适合于在集群中分发大型对象以减少网络通信,而累加器适合于进行聚合操作,如计数或求和。这两种共享变量的设计都是为了优化并行计算过程中的数据共享和通信效率。
(二)PySpark SQL模块
pyspark.sql模块包含10个类,提供了类型、配置、DataFrame和许多其他功能的SQL函数和方法,PySpark SQL模块相关类说明见表3。
表3 PySpark SQL模块相关类说明
类名 | 说明 |
---|---|
SparkSession | PySpark SQL编程的入口点 |
Column | 用来表示DataFrame中的列 |
Row | 用来表示DataFrame中的行 |
GroupedData | 用于提供DataFrame中的汇总功能 |
types | 定义DataFrame中的数据类型 |
Functions | 提供丰富、常用的功能,如数学工具、日期计算、数据转换等 |
Window | 提供窗口函数功能 |
DataFrame | 处理结构化数据 |
DataFrameNaFunctions | 用于处理DataFrame中的空值 |
DataFrameStatFunctions | 用于统计、汇总DataFrame中的数据 |
(三)PySpark Streaming模块
pyspark.streaming模块包含3个主要的类:StreamingContext、DStream、StreamingListener,也特别提供针对Flume、Kafka、Kinesis流数据处理的类,但这里只对前3个类进行说明,如下表4所示。
表4 PySpark Streaming模块相关类说明
类名 | 说明 |
---|---|
StreamingContext | 用于处理Spark Streaming应用的入口 |
DStream | Spark Streaming的基本抽象,DStream是一个连续的数据流 |
StreamingListener | 对Streaming数据流事件进行监控和处理 |
小结
本文介绍了PySpark,它是Apache Spark为Python开发者提供的API,使Python开发者能在Python环境下运行Spark程序。PySpark结合了Python在数据分析和机器学习领域的丰富库资源,以及Spark处理大数据的能力。它不仅能运行在单机环境,还能在集群上运行,适合处理大规模数据或进行分布式/并行计算。
PySpark包含公共类、SQL模块、Streaming模块、MLlib和ML包等。核心类如SparkContext、RDD、StreamingContext、DStream、SparkSession和DataFrame等,分别用于编程入口、数据抽象、流编程、SQL编程和处理结构化数据等。此外,还介绍了PySpark的公共类如SparkConf、广播变量与累加器,以及SQL模块和Streaming模块的相关类。
欢迎 点赞👍 | 收藏⭐ | 评论✍ | 关注🤗
