当前位置: 首页 > news >正文

【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。

文章目录

    • 前言
    • 一、PySpark简介
    • 二、PySpark子模块
      • (一)PySpark公共类
      • (二)PySpark SQL模块
      • (三)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.SparkContextPySpark编程的主要入口点
公共类pyspark.RDDPySpark数据抽象
Streaming模块pyspark.streaming.StreamingContextPySpark流编程主要入口点
Streaming模块pyspark.streaming.DStreamPySpark流数据抽象
SQL模块pyspark.sql.SparkSessionPySpark 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广播变量,可用于在任务之间复用
RDDPySpark中基础抽象
SparkConf用于PySpark应用程序的参数配置
SparkContextPySpark应用程序的编程入口点
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模块相关类说明
类名说明
SparkSessionPySpark 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应用的入口
DStreamSpark 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模块的相关类。

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

在这里插入图片描述

相关文章:

  • 0x01、Redis 主从复制的实现原理是什么?
  • 《Vue Router实战教程》14.路由元信息
  • MySQL逻辑架构有什么?
  • JavaScript学习教程,从入门到精通,JavaScript 数组与引用类型语法知识点及案例代码(10)
  • 三大开源大模型应用框架深度对比:AnythingLLM、Dify 与 Open-WebUI
  • XML、JSON 和 Protocol Buffers (protobuf) 对比
  • ESP32开发入门:基于VSCode+PlatformIO环境搭建指南
  • 在Oracle数据库中,一条SQL查询请求的执行过程是一个复杂且精细的流水线
  • CSS学习02 动态列数表格开发,解决多组数据布局与边框重合问题
  • WEB前端开发中常用的算法
  • 布局决定终局:基于开源AI大模型、AI智能名片与S2B2C商城小程序的战略反推思维
  • 从Function Calling到Tool Calling:Spring AI架构升级背后的技术考量
  • Git 高级操作
  • VMWare Workstation 17 安装 Ubuntu24.02
  • pycharm如何通过跳板机连接服务器在本地debug
  • Pytorch torch.utils.data.dataloader.default_collate 介绍
  • CTF web入门之命令执行 完整版
  • Git代码管理
  • 代码随想录-06-二叉树-05.01 二叉树的层序遍历
  • 【股票数据API接口19】如何获取股票主力资金走势数据之Python、Java等多种主流语言实例代码演示通过股票数据接口获取数据
  • 做网站哪家服务器好/seo优化个人博客
  • 淘宝联盟推广可以做网站吗/重庆seo推广
  • 重庆忠县网站建设公司电话/企业网站推广有哪些方式
  • asp.net 当前网站/西安核心关键词排名
  • 杭州规划建设网站/seo网站排名查询
  • 地方网站建设/最新国际新闻大事件