11-pyspark的RDD的变换与动作算子总结

目录

    • 前言
    • 变换算子
    • 动作算子


PySpark实战笔记系列第二篇

  • 10-用PySpark建立第一个Spark RDD(PySpark实战笔记系列第一篇)
  • 11-pyspark的RDD的变换与动作算子总结(PySpark实战笔记系列第二篇))

前言

一般来说,RDD包括两个操作算子:

  • 变换(Transformations):变换算子的特点是懒执行,变换操作并不会立刻执行,而是需要等到有动作(Actions)操作的时候才会真正进行计算,并显示结果。变换算子主要有:map、flatMap、groupByKey和reduceByKey等。

  • 动作(Actions):动作算子的特点是会立刻执行,动作操作会对RDD计算出一个结果,并把结果返回到驱动器程序中,或把结果存储到外部存储系统(如HDFS)中。动作算子主要有:collect、count、take、top和first等

默认情况下,在RDD上执行动作算子时,Spark会重新计算并刷新RDD,但借助RDD的持久化存储(cache和persist)方法可以将RDD缓存在内存当中,这样后续在RDD上执行动作算子时,Spark就不会重新计算和刷新RDD,从而显著提高计算速度。

官方文档:https://spark.apache.org/docs/latest/api/python/reference/pyspark.html

变换算子

操作调用形式参数说明作用示例
glomrdd.glom()将RDD中每一个分区中类型为T的元素转换成Array[T],这样每一个分区就只有一个数组元素在这里插入图片描述
coalescerdd.coalesce(numPartitions,[isShuffle=False])numPartitions:重新分区的分区数;isShuffle:是否在重新分区过程中进行混洗操作将RDD进行重新分区在这里插入图片描述
repartitionrdd.repartiton(numParttions)numPartitions:重新分区的分区数;coalesce()方法shuffle为true的情况在这里插入图片描述
combineByKeyrdd.combineByKey(createCombiner, mergeValue,mergeCombiners,[partitioner], [mapSideCombiner], [serializer])createCombiner 将 Value 进行初步转换;mergeValue 在每个分区把上一步转换的结果聚合;mergeCombiners 在所有分区上把每个分区的聚合结果聚合;partitioner 可选, 分区函数;mapSideCombiner 可选, 是否在 Map 端 Combine;serializer 序列化器对数据集按照Key进行聚合PySpark之Spark中的CombineByKey
distinctrdd.distinct()duid去重,即多个重复元素只保留一个
filterrdd.filter(func)func:过滤函数根据过滤函数func的逻辑含义对原RDD中的元素进行过滤,并返回一个新的RDD,其由满足过滤函数的True的元素构成在这里插入图片描述
flatMaprdd.flatMap(func)func:定义的函数名对RDD中每个元素按照func函数定义的处理逻辑进行操作,并将结果扁平化在这里插入图片描述
flatMapValuesrdd.flatMapValues(func)func:定义的函数对RDD元素格式为KV对中的V进行func定义的逻辑处理,Value中每一个元素被输入函数func映射为一系列的值,然后这些值再与原RDD中的Key组成一系列新的KV对,并将结果进行扁平化处理在这里插入图片描述
foldrdd.fold(value,func)value:设定的初始值对RDD每个元素按照func定义的逻辑进行处理。func包含两个参数a,b,其中a的初始值为value,后续代表累计值,b代表当前元素值。在这里插入图片描述spark的fold函数理解
foldByKeyrdd.foldByKey(value,func)value:设定的初始值此操作作用于元素为KV格式的RDD。它的作用是对RDD每个元素按照Key进行func定义的逻辑进行处理。func包含两个参数a,b,其中a的初始值为value,后续代表累计值,而b代表的是当前元素值。在这里插入图片描述
foreachrdd.foreach(func)对RDD每个元素按照func定义的逻辑进行处理。
foreachPartitionrdd.foreachPartition(func)对RDD每个分区中的元素按照func定义的逻辑进行处理
maprdd.map(func,preservesPartitioning=False)对RDD每个元素按照func定义的逻辑进行处理,它在统计单词个数等场景下经常使用在这里插入图片描述
mapPartitionsrdd.mapPartitions(func,preservesPartitioning=False)对RDD每个分区中的元素按照func定义的逻辑进行处理,并分别返回值在这里插入图片描述
mapValuesrdd.mapValues(func)对KV格式的RDD中的每个元素应用函数func,这个过程汇总不会更改键K,同时也保留了原始RDD的分区,即返回新的RDD在这里插入图片描述
groupByrdd.groupBy(func,numPartitions=None,partitionFunc=<function portable_hash><function portable_hash>)它接收一个函数func,这个函数返回的值作为Key,然后通过这个Key来对其中的元素进行分组,并返回一个新的RDD对象(返回的RDD中是KV格式的数据,其中V是一个迭代对象,因此需要遍历进行元素访问。)在这里插入图片描述
goupyByKeyrdd.groupByKey(numPartitions=None,partitionFunc=<function portable_hash><function portable_hash>)将RDD中每个键的值分组为单个序列,用numPartitions分区对生成的RDD进行哈希分区,并返回一个新的RDD对象在这里插入图片描述
keyByrdd.keyBy(func)在RDD上应用函数func,其中将原有RDD中的元素作为Key,该Key通过func函数返回的值作为Value创建一个元组,并返回一个新的RDD对象在这里插入图片描述
keysrdd.keys()获取KV格式的RDD中的Key序列,并返回一个新的RDD对象在这里插入图片描述
ziprdd.zip(oterRdd)将第一个RDD中的元素作为Key,第二个RDD对应的元素作为Value,组合成元素格式为元组的新RDD。这两个参与运算的RDD元素个数应该相同。在这里插入图片描述
zipWithIndexrdd.zipWithIndex()是将RDD中的元素作为Key, Key对应的元素索引作为Value,组合成元素格式为元组的新RDD在这里插入图片描述
valuesrdd.values()获取KV格式的RDD中的Value序列,并返回一个新的RDD对象
unionrdd.union(oterRDD)将第一个RDD中的元素与第二个RDD对应的元素进行合并,返回新RDD在这里插入图片描述
takeOrderedrdd.takeOrdered(num,key=None)num:获取的元素个数;key:排序依据从RDD中获取排序后的前num个元素构成的RDD,默认按照升序对元素进行排序,但也支持用可选函数进行指定在这里插入图片描述
takeSamplerdd.takeSample(withReplacement,num,seed=None)withReplacement:布尔值,代表元素是否可以多次抽样;num:代表抽样的样本数量;seed:代表随机数生成器的种子从RDD中抽样出固定大小的子数据集合,返回新的RDD在这里插入图片描述
subtrackrdd.subtract(otherRDD,numPartitions=None)numPartitons:可选,用于指定产生的差集RDD的分区数从RDD中排除掉otherRDD中的元素,并返回一个新的RDD在这里插入图片描述
subtractByKeyrdd.subtractByKey(otherRDD,numPartitions=None)numPartitons:可选,用于指定产生的差集RDD的分区数从元素为KV格式的RDD中排除掉otherRDD中的元素,只要两个RDD的元素Key一致,则排除,并返回一个新RDD在这里插入图片描述
sortByrdd.sortBy(keyfunc,ascending=True,numPartitions=None)根据函数keyfunc来对RDD对象元素进行排序,并返回一个新的RDD在这里插入图片描述
sortByKeyrdd.sortByKey(ascending=True, numPartitions=None, keyfunc=<function RDD.<lambda><lambda>>)keyfunc:可选,不提供则按照RDD中元素的key进行排序针对元素格式为KV的RDD,根据函数keyfunc来对RDD对象元素进行排序,并返回一个新的RDD在这里插入图片描述
samplerdd.sample(withReplacement,fraction,seed=None)withReplacement:布尔值,用于表示在采样过程中是否可以对同一个元素进行多次采样;fraction:数值,在[0,1]之间,指定抽样的比例;seed:随机数生成器的种子对数据按照指定的比例进行抽样(并不精确,例如100个元素的0.2不一定就是20个,可能存在偏差。)在这里插入图片描述
reducerdd.reduce(func)以按照函数func的逻辑对RDD中的元素进行运算,以减少元素个数(不能在空RDD上操作,会报ValueError错误)在这里插入图片描述
reduceByKeyrdd.reduceByKey(func,numPartitions=None,partitionFunc=<function partable_hash>)按照函数func的逻辑对元素格式为KV的RDD中的数据进行运算,以减少元素个数在这里插入图片描述
randomSplitrdd.randomSplit(weights,seed=None)weights:随机分割的权重按照权重weights对RDD进行随机分割,并返回多个RDD构成的列表在这里插入图片描述
lookuprdd.lookup(key)key:指定的查找键值根据key值从RDD中查找到相关的元素,返回RDD中键值的值列表在这里插入图片描述
joinrdd.join(otherRDD,numPartitions=None)返回一个RDD,其中包含自身和otherRDD匹配键的所有成对元素。每对元素将以(k,(v1,v2))元组返回,其中(k,v1)在自身中,而(k,v2)在另一个otherRDD中在这里插入图片描述
intersectionrdd.intersection(otherRDD)返回一个此RDD和另一个otherRDD的交集,在这个过程中,会进行去重操作在这里插入图片描述
fullOuterJoinrdd.fullOuterJoin(otherRDD,numPartitions=None)对于RDD自身中的每个元素(k,v),如果另外一个otherRDD匹配到k,那么生成的RDD元素格式为(k,(v,w));如果另外一个otherRDD匹配不到k,则生成的RDD元素格式为(k,(v,None))。同样地,在otherRDD匹配到k的值,但是在RDD自身没有匹配到值w,则返回None,即生成的RDD元素格式为(k,(None,w))。在这里插入图片描述
leftOuterJoinrdd.leftOuterJoin(otherRDD,numPartitions=None)返回此RDD和另一个otherRDD的左外部连接(left outer join)。对于RDD自身中的每个元素(k,v),如果另外一个otherRDD匹配到k,那么生成的RDD元素格式为(k,(v,w)),如果另外一个otherRDD匹配不到k,则生成的RDD元素格式为(k,(v,None))。在这里插入图片描述
rightOuterJoinrdd.rightOuterJoin(otherRDD,numPartitions=None)返回此RDD和另一个otherRDD的右外部连接(left outer join)。
aggregateByKeyrdd.aggregateByKey(zeroValue,seqFunc,combFunc,numPartitions=None,partitionFunc=<function partable_hash>)zeroValue代表每次按Key分组之后的每个组的初始值。seqFunc函数用来对每个分区内的数据按照key分别进行逻辑计算。combFunc对经过seqFunc处理过的数据按照key分别进行逻辑计算。在这里插入图片描述
cartesianrdd.cartesian(oterRDD)返回自身元素和另外一个otherRDD中元素的笛卡尔积在这里插入图片描述

动作算子

操作调用形式参数说明作用示例
firstrdd.first()获取到RDD中的一个元素在这里插入图片描述
maxrdd.max()获取到RDD中最大的一个元素在这里插入图片描述
minrdd.min()获取到RDD中最小的一个元素
sumrdd.sum()获取到RDD中元素的和在这里插入图片描述
takerdd.take(n)n:代表获取的元素个数获取到RDD中指定的前n个元素在这里插入图片描述
toprdd.top(n)n:代表获取的元素个数获取到RDD中排序后的前n个元素在这里插入图片描述
countrdd.count()获取到RDD中元素的个数在这里插入图片描述
collectrdd.collect()将RDD类型的数据转化为数组,同时会从集群中拉取数据到driver端在这里插入图片描述
collectAsMaprdd.collectAsMap()与collect操作类似,但适用于键值RDD并将它们转换为Map映射以保留其键值结构在这里插入图片描述
countByKeyrdd.countByKey()统计RDD[K,V]中每个K的数量,字典形式返回各键的统计数量情况在这里插入图片描述
countByValuerdd.countByValue()统计RDD中各个Value出现的次数,并返回一个字典。字典的K为元素的值,而V是出现的次数在这里插入图片描述
statsrdd.stats()给出RDD数据的统计信息,包括计数、均值、方差、最大值和最小值,返回的是一个StatCounter对象在这里插入图片描述
aggregaterdd.aggregate(zeroValue,seqOp,combOp)zeroValue:初始值,形式是(x,y);seqOp函数:是对每个分区上的数据信息操作;combOp函数对每个分区的计算结果再进行合并操作使用给定的seqOp函数和给定的零值zeroValue来聚合每个分区上的元素,然后再用combOp函数和给定的零值zeroValue汇总所有分区的结果。在这里插入图片描述
cacherdd.cache()在RDD对象上进行缓存操作,后续的RDD操作会直接从内存中加载数据进行计算。使用默认存储级别(MEMORY_ONLY)保留该RDD,防止多次进行创建,从而提高效率。在这里插入图片描述
persistrdd.persist(storageLevel)storageLevel:指定缓存的存储级别在RDD对象上按照指定的存储级别进行缓存操作
saveAsTextFilerdd.saveAsTextFile(path,compressionCodecClass=None)path:代码保存的文件路径;compressionCodecClass:用于压缩,默认为“org.apache.hadoop.io.compress.GzipCodec”保存RDD对象为一个文件,其中元素以字符串的形式体现。在这里插入图片描述

参考文档:

  • https://spark.apache.org/docs/latest/api/python/reference/pyspark.html
  • 《Python大数据处理库PySpark实战》

想获取变换和动作算子总结的excel文档,可以扫码关注博主微信公众号,回复关键词【变换动作】 获取总结文档。
在这里插入图片描述

博主写博文就是方便对自己所学所做的事做一备份记录或回顾总结。欢迎留言,沟通学习。

刚开始接触,请多指教,欢迎留言交流!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/521627.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

BUUCTF:BUU UPLOAD COURSE 1[WriteUP]

构造一句话PHP木马 <?php eval(system($_POST[shell])); ?> 利用eval函数解析$shell的值使得服务器执行system命令 eval函数是无法直接执行命令的&#xff0c;只能把字符串当作php代码解析 这里我们构造的木马是POST的方式上传&#xff0c;那就用MaxHacKBar来执行 …

【数据库】SQL简介

SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;是一种用于管理关系型数据库管理系统&#xff08;RDBMS&#xff09;的标准化语言。它用于访问和操作数据库中的数据&#xff0c;执行各种任务&#xff0c;如插入、更新、删除和检索数据&#x…

215 基于matlab的快速跟踪算法

基于matlab的快速跟踪算法&#xff0c;提出一种简单又快速、 鲁棒性的算法&#xff0c;基于贝叶斯框架下&#xff0c;该模型 &#xff08;即图像强度和从目标位置&#xff09; 的低级功能及周边地区的统计相关性的时空关系。跟踪问题是通过计算信心地图&#xff0c;并将以最大限…

数据结构和算法:分治

分治算法 分治&#xff08;divide and conquer&#xff09;&#xff0c;全称分而治之&#xff0c;是一种非常重要且常见的算法策略。分治通常基于递归实现&#xff0c;包括“分”和“治”两个步骤。 1.分&#xff08;划分阶段&#xff09;&#xff1a;递归地将原问题分解为两个…

初学python记录:力扣1483. 树节点的第 K 个祖先

题目&#xff1a; 给你一棵树&#xff0c;树上有 n 个节点&#xff0c;按从 0 到 n-1 编号。树以父节点数组的形式给出&#xff0c;其中 parent[i] 是节点 i 的父节点。树的根节点是编号为 0 的节点。 树节点的第 k 个祖先节点是从该节点到根节点路径上的第 k 个节点。 实现…

docker搭建EFK

目录 elasticsearch1.创建网络2.拉取镜像3.创建容器如果出现启动失败&#xff0c;提示目录挂载失败&#xff0c;可以考虑如下措施 开放防火墙端口4.验证安装成功重置es密码关闭https连接创建kibana用户创建新账户给账户授权 kibana1.创建容器2.验证安装成功3.es为kibana创建用户…

金融中的数学模型

平稳时间序列 时间序列的基本统计特性&#xff0c;如均值、方差和自相关等&#xff0c;在时间上不随时间的推移而发生显著的变化。 平稳时间序列通常具有以下特征&#xff1a; 均值不随时间变化&#xff1a;序列的均值在时间上保持恒定。方差不随时间变化&#xff1a;序列的…

元宇宙虚拟空间的场景渲染(五)

前言 该文章主要讲元宇宙虚拟空间的场景渲染&#xff0c;基本核心技术点&#xff0c;不多说&#xff0c;直接引入正题。 场景渲染 下面第二个图中的代码是一个循环渲染逻辑&#xff0c;首先getDelta 获取2次时间的时间间隔&#xff0c;requestAnimationFrame请求我们的一个动…

C++模版简单认识与使用

目录 前言&#xff1a; 1.泛型编程 2.函数模版 3.类模版 为什么要有类模版&#xff1f;使用typedef不行吗&#xff1f; 类模版只能显示实例化&#xff1a; 注意类名与类型的区别&#xff1a; 注意类模版最好不要声明和定义分离&#xff1a; 总结&#xff1a; 前言&…

RobotFramework测试框架(13)--扩展RF

扩展RF 可以写Python库 Static Library 静态库中RF的关键字被定义为python的方法。 Static Library With a Class 将Python类导入为Library&#xff0c;则类中的方法可以是关键字。 class DemoLibrary:def __init__(self, *args, **kwargs):print(f"Sample Library …

008 CSS盒子模型

文章目录 盒子模型内容-宽度和高度内边距-padding边框-border圆角-border-radius 外边距-margin上下margin的传递上下margin的折叠块级元素的水平居中行内级元素(包括inline-block元素)的水平居中 外轮廓-outline盒子阴影-box-shadow文字阴影-text-shadow行内非替换元素的特殊性…

代码随想录算法训练营第三十二天| LeetCode 122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II

一、LeetCode 122.买卖股票的最佳时机II 题目链接/文章讲解/视频讲解&#xff1a;https://programmercarl.com/0122.%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8%E7%9A%84%E6%9C%80%E4%BD%B3%E6%97%B6%E6%9C%BAII.html 状态&#xff1a;已解决 1.思路 这题的核心思路是&#xff1a;…

Python爬虫-爬取药膳食谱数据

&#x1f388; 博主&#xff1a;一只程序猿子 &#x1f388; 博客主页&#xff1a;一只程序猿子 博客主页 &#x1f388; 个人介绍&#xff1a;爱好(bushi)编程&#xff01; &#x1f388; 创作不易&#xff1a;喜欢的话麻烦您点个&#x1f44d;和⭐&#xff01; &#x1f388;…

第二十五周代码(蓝桥杯查缺补漏)

2024/03/31 周日 填充 题目链接 【参考代码】 想用暴力&#xff0c;没过 //枚举&#xff0c;未出结果QAQ #include <bits/stdc.h> using namespace std; string s00 "00"; string s11 "11"; int ans 0; //m个问号&#xff0c;子串有2^m…

C#探索之路基础夯实篇(4):UML类图中的六种关系详细说明

文章目录 UML类图中的关系前景1、关联关系&#xff08;Association&#xff09;&#xff1a;2、聚合关系&#xff08;Aggregation&#xff09;&#xff1a;3、组合关系&#xff08;Composition&#xff09;&#xff1a;4、泛化关系&#xff08;Generalization&#xff09;&…

计算机网络——37认证

认证 目标&#xff1a;Bob需要Alice证明他的身份 Protocol ap1.0&#xff1a;Alice说"A am Alice" 可能出现的问题&#xff1a; 在网络上Bob看不到Alice&#xff0c;因此Trudy可以简单的声称他是Alice 认证&#xff1a;重新尝试 Protocol ap2.0&#xff1a;Alice…

12.自定义的多帧缓存架构

1.简介 在数字图像处理中&#xff0c;经常需要用到的一个架构就是多帧缓存。视频流中需要用到多帧缓存来防止帧撕裂现象&#xff0c;图像处理中也需要帧差法来做移动目标检测。因此一个多帧缓存架构在图像系统的设计中是十分重要的。 2.多帧缓存 在视频流中&#xff0c;通常不…

数据库 06-03 时间戳

01.什么是时间戳 “时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。通俗的讲, 时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。 02.用时间戳实现调度 定义 数据库给予一个事务一个时…

用友U9 存在PatchFile.asmx接口任意文件上传漏洞

声明&#xff1a; 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 简介 用友U9是由中国用友软件股份有限公司开发的一款企业…

前端学习笔记:display(未完成)

这是本人学习的总结&#xff0c;主要学习资料如下 目录 1、一般属性2、flex系列2.1、flex容器的维度2.2、flex其他的关联属性 – 1、一般属性 display是css中的一个重要属性&#xff0c;它的值基本决定了元素的布局。这里就对它的值如何影响元素布局做一个总结。 display:bl…