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

PySpark作为Apache Spark的Python API,融合Python易用性与Spark分前言Spark主要由Scala和Java语言开发,运行在Java虚拟机(Java Virtual Machine,JVM)中。除了提供S

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

PySpark作为Apache Spark的Python API,融合Python易用性与Spark分

前言

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-04-12,如有侵权请联系 cloudcommunity@tencent 删除配置数据数据分析pyspark变量

发布者:admin,转转请注明出处:http://www.yc00.com/web/1747719127a4685657.html

相关推荐

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

    PySpark作为Apache Spark的Python API,融合Python易用性与Spark分前言Spark主要由Scala和Java语言开发,运行在Java虚拟机(Java Virtual Machine,JVM)中。除了提供S

    7小时前
    10

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信