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

news2025/1/14 2:35:43

目录

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


前言

一般来说,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.coloradmin.cn/o/1572990.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大语言模型落地的关键技术:RAG

1、什么是RAG&#xff1f; RAG 是检索增强生成&#xff08;Retrieval-Augmented Generation&#xff09;的简称&#xff0c;是当前最火热的大语言模型应用落地的关键技术&#xff0c;主要用于提高语言模型的效果和准确性。它结合了两种主要的NLP方法&#xff1a;检索&#xff…

【智能排班系统】AOP实现操作日志自动记录

文章目录 操作日志介绍自动保存操作日志基本实现思路定义注解枚举业务类型枚举操作人员类型枚举 AOP具体实现方法上添加注解 日志增删改查日志表sql实体类ServiceControllerVo 操作日志介绍 操作日志是对系统或应用程序中所有用户操作、系统事件、后台任务等进行详细记录的文本…

代码随想录算法训练营Day46|LC139 单词拆分

一句话总结&#xff1a;完全背包&#xff01; 原题链接&#xff1a;139 单词拆分 动态规划之完全背包五部曲&#xff1a; 确定dp数组与下标含义&#xff1a;表示字符串长度为i时&#xff0c;dp[i] true 的话&#xff0c;可以拆分为一个或多个在字典中出现的单词。确定递归公…

贪心算法|122.买卖股票的最佳时机II

力扣题目链接 class Solution { public:int maxProfit(vector<int>& prices) {int result 0;for (int i 1; i < prices.size(); i) {result max(prices[i] - prices[i - 1], 0);}return result;} }; 贪心思路出来了&#xff0c;代码居然如此简单啊&#xff0…

16.Python多线程

如果想让我们的程序同时执行多个任务&#xff0c;就需要使用多线程技术了 。到目前为止&#xff0c;我们编写的程序都是单线程的&#xff0c;在运行时一次只能执行 一个任务。 1 线程相关的知识 1.1 进程 一个进程就是一个正在执行的程序&#xff0c;每一个进程都有自己独立…

软考高级架构师:嵌入式处理器体系结构

一、AI 讲解 嵌入式处理器体系结构中&#xff0c;冯诺依曼结构和哈佛结构是两种最基本的设计模式&#xff0c;它们各有特点和典型应用场景。 结构定义特点典型应用冯诺依曼结构一种将程序存储器和数据存储器合并在同一存储器中的计算机体系结构。这意味着指令和数据共享同一个…

基于javassm实现的水果销售管理网站

开发语言&#xff1a;Java 框架&#xff1a;ssm 技术&#xff1a;JSP JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclip…

【C++航海王:追寻罗杰的编程之路】C++的类型转换

目录 1 -> C语言中的类型转换 2 -> 为什么C需要四种类型转换 3 -> C强制类型转换 3.1 -> static_cast 3.2 -> reinterpret_cast 3.3 -> const_cast 3.4 -> dynamic_cast 4 -> RTTI 1 -> C语言中的类型转换 在C语言中&#xff0c;如果赋值运…

【攻防世界】FlatScience

dirsearch 扫描发现四个文件 在login.php 中发现 输入 http://61.147.171.105:61912/login.php/?debug 发现源码 <?php if(isset($_POST[usr]) && isset($_POST[pw])){$user $_POST[usr];$pass $_POST[pw];$db new SQLite3(../fancy.db);$res $db->query(…

【STM32】存储器和位带映射(bit band mapping)

文章目录 0 前言1 关于地址和存储器2 STM32内部存储器3 位带映射&#xff08;bit band mapping&#xff09;4 扩展&#xff1a;IAP 0 前言 最近在研究stm32标准库&#xff0c;对使用宏定义实现位操作的函数非常感兴趣&#xff0c;简单的一句PAout(1) 0;就能实现某个引脚电平的…

【JavaWeb】Day35.MySQL概述——数据库设计-DDL(二)

表操作 关于表结构的操作也是包含四个部分&#xff1a;创建表、查询表、修改表、删除表。 1.创建 语法 create table 表名( 字段1 字段1类型 [约束] [comment 字段1注释 ], 字段2 字段2类型 [约束] [comment 字段2注释 ], ...... 字段n 字段n类型 [约束] [comment …

phpstorm设置头部注释和自定义注释内容

先说设置位置&#xff1a; PhpStorm中文件、类、函数等注释的设置在&#xff1a;setting-》Editor-》FIle and Code Template-》Includes-》PHP Function Doc Comment下设置即可&#xff0c;其中方法的默认是这样的&#xff1a; /** ${PARAM_DOC} #if (${TYPE_HINT} ! "…

SpringBoot新增员工模块开发

需求分析与设计 一&#xff1a;产品原型 一般在做需求分析时&#xff0c;往往都是对照着产品原型进行分析&#xff0c;因为产品原型比较直观&#xff0c;便于我们理解业务。 后台系统中可以管理员工信息&#xff0c;通过新增员工来添加后台系统用户。 新增员工原型&#xf…

4.1 JavaScript的使用

JavaScript有两种使用方式&#xff1a;一是在HTML文档中直接添加代码&#xff1b;二是将JavaScript脚本代码写到外部的JavaScript文件中&#xff0c;再在HTML文档中引用该文件的路径地址。 这两种使用方式的效果完全相同&#xff0c;可以根据使用率和代码量选择相应的开发方式。…

【ControlNet v3版本论文阅读】

网络部分最好有LDM或者Stable Diffusion的基础&#xff0c;有基础的话会看的很轻松 Abstract 1.提出了一种网络结构支持额外输入条件控制大型预训练的扩散模型。利用预训练模型学习一组不同的条件控制。 2.ControlNet对于小型&#xff08;<50k&#xff09;或大型&#xff…

经典机器学习模型(九)EM算法在高斯混合模型中的应用

经典机器学习模型(九)EM算法在高斯混合模型中的应用 EM算法的推导可以参考&#xff1a; 经典机器学习模型(九)EM算法的推导 若随机变量X服从一个数学期望为 μ μ μ、方差为 σ 2 σ^2 σ2的正态分布&#xff0c;可以记为 N ( μ &#xff0c; σ 2 ) N(μ&#xff0c;σ2)…

二叉树进阶——手撕二叉搜索树

troop主页&#xff1a;troop 手撕二叉搜索树 1.二叉搜索树的定义2.实现&#xff08;非递归&#xff09;补充结构2.1查找2.2插入2.3删除&#xff08;重要&#xff09;情况1(无孩子&&一个孩子&#xff09; 3.二叉搜索树的应用3.1K模型3.2KV模型3.2.1KV模型的实现 总结二叉…

「每日跟读」英语常用句型公式 第4篇

「每日跟读」英语常用句型公式 第4篇 1. I’ve decided to ____ 我决定要____了 I’ve decided to take a vacation (我决定要去度假) I’ve decided to change my lifestyle (我决定要改变我的生活方式) I’ve decided to adopt a dog (我决定要收养一条狗了) I’ve dec…

【AOSP】手把手教你编译和调试AOSP源码

一、下载AOSP源码 在开始之前&#xff0c;我们先安装编译AOSP需要的一些系统基本依赖&#xff0c;如下命令 sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g-multilib libc6-dev-i386 lib32ncurses5-dev x11proto…

三子棋游戏----C语言版【超级详细 + 视频演示 + 完整源码】

㊙️小明博客主页&#xff1a;➡️ 敲键盘的小明 ㊙️ ✅关注小明了解更多知识☝️ 文章目录 前言一、三子棋的实现思路二、三子棋的实现步骤2.1 先显示游戏的菜单2.2 游戏的具体实现2.2.1 棋盘的初始化2.2.2 展示棋盘2.2.3 下棋&#x1f534;玩家下棋&#x1f534;电脑下棋2.2…