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

目录

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


前言

一般来说,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实战》

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

索引的概念

索引的概念    1.索引是一种可选的与表相关的数据库对象&#xff0c;用于提高数据的查询效率。    2.索引是一种有序的数据结构。    3.如果一个表没有创建索引&#xff0c;则对该表进行查询时需要进行全表扫描&#xff1b;如果创建了索引&#xff0c;则在有条件查询时…

thinkphp6入门(21)-- 如何删除图片、文件

假设文件的位置在 /*** 删除文件* $file_name avatar/20240208/d71d108bc1086b498df5191f9f925db3.jpg*/ function deleteFile($file_name) {// 要删除的文件路径$file app()->getRootPath() . public/uploads/ . $file_name; $result [];if (is_file($file)) {if (unlin…

C刊级 | Matlab实现GWO-BiTCN-BiGRU-Attention灰狼算法优化双向时间卷积双向门控循环单元融合注意力机制多变量回归预测

C刊级 | Matlab实现GWO-BiTCN-BiGRU-Attention灰狼算法优化双向时间卷积双向门控循环单元融合注意力机制多变量回归预测 目录 C刊级 | Matlab实现GWO-BiTCN-BiGRU-Attention灰狼算法优化双向时间卷积双向门控循环单元融合注意力机制多变量回归预测效果一览基本介绍程序设计参考…

【IEEE STD 1801】——Introduction

Introduction 本标准的目的是提供便携、低功耗的设计规范&#xff0c;这些规范可以在整个电子系统设计、分析、验证和实现流程中与各种商业产品一起使用。 当电子设计自动化(EDA)行业在20世纪80年代开始创建用于指定、仿真和实现数字电子电路的功能规范的标准时&#xff0c;主…

Midjourney艺术家分享|By Moebius

Moebius&#xff0c;本名让吉拉德&#xff08;Jean Giraud&#xff09;&#xff0c;是一位极具影响力的法国漫画家和插画师&#xff0c;以其独特的科幻和幻想风格而闻名于世。他的艺术作品不仅在漫画领域内受到高度评价&#xff0c;也为电影、时尚和广告等多个领域提供了灵感。…

练习 16 Web [极客大挑战 2019]LoveSQL

extractvalue(1,concat(‘~’, (‘your sql’) ) )报错注入&#xff0c;注意爆破字段的时候表名有可能是table_name不是table_schema 有登录输入框 常规尝试一下 常规的万能密码&#xff0c;返回了一个“admin的密码”&#xff1a; Hello admin&#xff01; Your password is…

2023年港澳台联考中的招生大户武汉大学

导读 随着小米集团雷军近期的热度不断上升&#xff0c;很多家长开始关注到武汉大学这样一所历史悠久的亚洲知名大学。小米集团的董事长雷军就是毕业于武汉大学的校友。今天我们一起来看一下&#xff0c;2023年港澳台联招中的武汉大学&#xff01; 学校简介 武汉大学是一所位于湖…

Redis(性能管理、主从复制、哨兵模式)概述及部署

目录 一、性能管理 1、查看Redis内存使用 2、内存碎片率 3、跟踪内存碎片率 4、内存使用率 5、内回收key 二、Redis集群有三种模式 三、Redis主从复制 1、主从复制的概念 2、主从复制的作用 3、主从复制的流程 4、搭建Redis主从复制 1.环境准备 2.安装Redis&#…

SV学习笔记(六)

文章目录 覆盖率类型写在前面代码覆盖率断言覆盖率功能覆盖率漏洞率曲线 功能覆盖策略收集信息而非数据只测量需要的内容验证的完备性 覆盖组写在前面在类里定义covergroup 数据采样写在前面coverpoint和binbin的创建和应用命名coverpoint和bin条件覆盖率翻转覆盖率wildcard覆盖…

Linux——线程控制

目录 前言 一、线程创建 1.创建线程 2.线程传递结构体 3.创建多线程 4.收到信号的线程 二、线程终止 三、线程等待 四、线程分离 五、取消线程 六、线程库管理的原理 七、站在语言角度理解pthread库 八、线程的局部存储 前言 前面我们学习了线程概念和线程创建&…

C语言实现快速排序算法

1. 什么是快速排序算法 快速排序的核心思想是通过分治法&#xff08;Divide and Conquer&#xff09;来实现排序。 算法的基本步骤是: 1. 选择一个基准值&#xff08;通常是数组中的某个元素&#xff09;&#xff0c;将数组分成两部分&#xff0c;使得左边的部分所有元素都小于…

C和C++内存管理

目录&#xff1a; 一&#xff1a;C和C内存分布 二&#xff1a;C动态内存管理方式 三&#xff1a;C动态内存管理方式 四&#xff1a;operator new与operator delete函数 五&#xff1a;new和delete的实现原理 六&#xff1a;定位new表达式(placement-new) 七&#xff1…

ubuntu-server部署hive-part2-安装hadoop

参照 https://blog.csdn.net/qq_41946216/article/details/134345137 操作系统版本&#xff1a;ubuntu-server-22.04.3 虚拟机&#xff1a;virtualbox7.0 安装hadoop ​​​​​​下载上传 下载地址 https://archive.apache.org/dist/hadoop/common/hadoop-3.3.4/ 以root用…

用C/C++加Easyx实现俄罗斯方块游戏(爆肝4万字,完全免费)

前言 相信大家一定玩过俄罗斯方块这款小游戏&#xff0c;简单容易上手是老少皆宜的小游戏&#xff0c;今天大家就跟着我来实现这个小游戏吧&#xff01;让自己学的C语言有用武之地。 为了让俄罗斯方块的开发更为简单些&#xff0c;图像更为丰富&#xff0c;在这里就利用了Easyx…

设计模式总结-原型设计模式

原型设计模式 模式动机模式定义模式结构模式分析深拷贝和浅拷贝原型模式实例与解析实例一&#xff1a;邮件复制&#xff08;浅克隆&#xff09;实例二&#xff1a;邮件复制&#xff08;深克隆&#xff09; 模式动机 在面向对象系统中&#xff0c;使用原型模式来复制一个对象自…

vue使用iview导航栏Menu activeName不生效

activeName不生效 一、问题一、解决方案&#xff0c; 一、问题 根据ivew官网的提示&#xff0c;设置了active-name和open-names以后&#xff0c;发现不管是设置静态是数据还是设置动态的数据&#xff0c;都不生效 一、解决方案&#xff0c; 在设置动态名称的时候&#xff0c…

Centos7环境下安装MySQL8详细教程

1、下载mysql安装包 下载哪个版本&#xff0c;首先需要确定一下系统的glibc版本&#xff0c;使用如下命令&#xff1a; rpm -qa | grep glibc ​​​​​​​ 2、检查是否安装过mysql ps:因为以前用yum安装过&#xff0c;所以先用yum卸载。如果不是此方式或者没安装过则跳过…

基于SpringBoot Vue求职招聘系统

一、&#x1f4dd;功能介绍 基于SpringBoot Vue招聘系统的设计与实现 角色&#xff1a;管理员、企业、用户 管理员&#xff1a;管理员进入主页面&#xff0c;主要功能包括对个人中心、企业管理、用户管理、岗位类型管理、招聘信息管理、应聘记录管理、留言反馈、系统管理等进…

笛子基础入门

文章目录 1.符号2. 笛子指法说明3. 曲谱3.1 年轮3.2 生生世世爱 1.符号 笛子简谱&#xff1a;由七个基本数字组成&#xff08;1234567&#xff09;&#xff1b;高音在数字上面加一“.”&#xff0c;低音则在下面加一“.”&#xff0c;不加点则是中音&#xff1b;数字后面加横线…

Linux从入门到精通 --- 2.基本命令入门

文章目录 第二章&#xff1a;2.1 Linux的目录结构2.1.1 路径描述方式 2.2 Linux命令入门2.2.1 Linux命令基础格式2.2.2 ls命令2.2.3 ls命令的参数和选项2.2.4 ls命令选项的组合使用 2.3 目录切换相关命令2.3.1 cd切换工作目录2.3.2 pwd查看当前工作目录2.4 相对路径、绝对路径和…