【PySpark大数据分析概述】03 PySpark大数据分析

【作者主页】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

文章目录


前言

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模块的相关类。

欢迎 点赞👍 | 收藏⭐ | 评论✍ | 关注🤗

相关推荐
CopyLower2 小时前
分布式ID生成方案的深度解析与Java实现
java·开发语言·分布式
ml130185288745 小时前
开发一个环保回收小程序需要哪些功能?环保回收小程序
java·大数据·微信小程序·小程序·开源软件
Charlie__ZS5 小时前
SpringCloud - 分布式事务
分布式·spring·spring cloud
zybishe6 小时前
免费送源码:Java+ssm+MySQL 酒店预订管理系统的设计与实现 计算机毕业设计原创定制
java·大数据·python·mysql·微信小程序·php·课程设计
lauo8 小时前
智体知识库:ai-docs对分布式智体编程语言Poplang和javascript的语法的比较(知识库问答)
开发语言·前端·javascript·分布式·机器人·开源
派可数据BI可视化8 小时前
数据中台、BI业务访谈(二):组织架构梳理的坑
数据仓库·人工智能·信息可视化·数据分析·商业智能bi
晨曦5432108 小时前
绘图与数据可视化
信息可视化·数据挖掘·数据分析
塔能物联运维8 小时前
塔能科技解节能密码,工厂成本“效益方程式”精准破题
大数据·人工智能
Lilith的AI学习日记10 小时前
MetaGPT深度解析:重塑AI协作开发的智能体框架实践指南
大数据·人工智能·机器学习·aigc
岁月如歌,青春不败11 小时前
CMIP6数据分析与可视化、降尺度技术与气候变化的区域影响、极端气候分析
人工智能·数据挖掘·数据分析·大气科学·气象学·cmip6·地球科学