[PySpark学习]RDD的重要算子

本文讲述了Spark中RDD的核心概念、mapPartitions和foreachPartition的使用,以及repartition和coalesce的重分区功能,以及单值和键值对的聚合算子,最后涉及关联操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、RDD概念

RDD(英文全称Resilient Distributed Dataset),即弹性分布式数据集是spark中引入的一个数据结构,是Spark中最基本的数据抽象,代表一个不可变、可分区、里面的元素可并行计算的集合。

Resilient弹性:RDD的数据可以存储在内存或者磁盘当中,RDD的数据可以分区。

Distributed分布式:RDD的数据可以分布式存储,可以进行并行计算。

Dataset数据集:一个用于存放数据的集合。

在上一篇《SparkRDD的转换与动作算子》中,介绍了SparkRDD中的一些常用算子,下面介绍RDD中的一些重要算子,是在实际是工作用的比较多,而且比较复杂的一些算子。

以下演示通过SecureCRTPortable客户端远程连接Linux服务器操作pyspark。

        连接界面如下:

二、分区算子

作用:针对整个分区数据进行处理的算子。

1、mapPartitions算子

        输入数据:rdd = sc.parallelize([1,2,3,4,5,6,7,8,9,10],3),先查看分区情况

>>> rdd = sc.parallelize([1,2,3,4,5,6,7,8,9,10],3)

# 查看分区
>>> rdd.glom().collect()     

# 运行结果 [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]  

        解释:parallelize(data,num)通过自定义列表的方式初始化RDD对象。(一般用于测试)

                        其中data为输入的数据,num为选择分区数。

                   glom()  可以将RDD以分区形式输出,查看数据在哪个分区。

                   getNumPartitions() 查看当前RDD有多少个分区

        目前parallelize设置了3个分区,因此输出结果有3个列表。

        以下通过map和mapPartitions的对比查看两个算子的区别:

        需求: 对数字加一

        map效果代码:

>>> rdd = sc.parallelize([1,2,3,4,5,6,7,8,9,10],3)
>>> 
#自定义函数
>>> def my_add(num):
...     print(f"传递进来的数据{num}")
...     return num+1
... 
>>> rdd.map(my_add).collect()


###  运行结果
传递进来的数据4
传递进来的数据5
传递进来的数据6
传递进来的数据1
传递进来的数据2
传递进来的数据3
传递进来的数据7
传递进来的数据8
传递进来的数据9
传递进来的数据10
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

        总结:map被调用了10次,反复操作会导致资源消耗,浪费资源。       

         mapPartitions效果代码:


                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值