【pyspark速成专家】4_Spark之RDD编程2

目录

四,常用PairRDD的转换操作

五,缓存操作


四,常用PairRDD的转换操作

PairRDD指的是数据为长度为2的tuple类似(k,v)结构的数据类型的RDD,其每个数据的第一个元素被当做key,第二个元素被当做value.

reduceByKey

#reduceByKey对相同的key对应的values应用二元归并操作
rdd = sc.parallelize([("hello",1),("world",2),("hello",3),("world",5)])
rdd.reduceByKey(lambda x,y:x+y).collect()[('hello', 4), ('world', 7)]

groupByKey

#groupByKey将相同的key对应的values收集成一个Iterator
rdd = sc.parallelize([("hello",1),("world",2),("hello",3),("world",5)])
rdd.groupByKey().collect()[('hello', <pyspark.resultiterable.ResultIterable at 0x119c6ae48>),('world', <pyspark.resultiterable.ResultIterable at 0x119c6a860>)]

sortByKey

#sortByKey按照key排序,可以指定是否降序
rdd = sc.parallelize([("hello",1),("world",2),("China",3),("Beijing",5)])
rdd.sortByKey(False).collect()[('world', 2), ('hello', 1), ('China', 3), ('Beijing', 5)]

join

#join相当于根据key进行内连接
age = sc.parallelize([("LiLei",18),("HanMeiMei",16),("Jim",20)])
gender = sc.parallelize([("LiLei","male"),("HanMeiMei","female"),("Lucy","female")])
age.join(gender).collect()[('LiLei', (18, 'male')), ('HanMeiMei', (16, 'female'))]

leftOuterJoin和rightOuterJoin

#leftOuterJoin相当于关系表的左连接age = sc.parallelize([("LiLei",18),("HanMeiMei",16)])
gender = sc.parallelize([("LiLei","male"),("HanMeiMei","female"),("Lucy","female")])
age.leftOuterJoin(gender).collect()[('LiLei', (18, 'male')), ('HanMeiMei', (16, 'female'))]#rightOuterJoin相当于关系表的右连接
age = sc.parallelize([("LiLei",18),("HanMeiMei",16),("Jim",20)])
gender = sc.parallelize([("LiLei","male"),("HanMeiMei","female")])
age.rightOuterJoin(gender).collect()[('LiLei', (18, 'male')), ('HanMeiMei', (16, 'female'))]

cogroup

#cogroup相当于对两个输入分别goupByKey然后再对结果进行groupByKeyx = sc.parallelize([("a",1),("b",2),("a",3)])
y = sc.parallelize([("a",2),("b",3),("b",5)])result = x.cogroup(y).collect()
print(result)
print(list(result[0][1][0]))[('a', (<pyspark.resultiterable.ResultIterable object at 0x119c6acc0>, <pyspark.resultiterable.ResultIterable object at 0x119c6aba8>)), ('b', (<pyspark.resultiterable.ResultIterable object at 0x119c6a978>, <pyspark.resultiterable.ResultIterable object at 0x119c6a940>))]
[1, 3]

subtractByKey

#subtractByKey去除x中那些key也在y中的元素x = sc.parallelize([("a",1),("b",2),("c",3)])
y = sc.parallelize([("a",2),("b",(1,2))])x.subtractByKey(y).collect()[('c', 3)]

foldByKey

#foldByKey的操作和reduceByKey类似,但是要提供一个初始值
x = sc.parallelize([("a",1),("b",2),("a",3),("b",5)],1)
x.foldByKey(1,lambda x,y:x*y).collect()[('a', 3), ('b', 10)]

五,缓存操作

如果一个rdd被多个任务用作中间量,那么对其进行cache缓存到内存中对加快计算会非常有帮助。

声明对一个rdd进行cache后,该rdd不会被立即缓存,而是等到它第一次被计算出来时才进行缓存。

可以使用persist明确指定存储级别,常用的存储级别是MEMORY_ONLY和EMORY_AND_DISK。

如果一个RDD后面不再用到,可以用unpersist释放缓存,unpersist是立即执行的。

缓存数据不会切断血缘依赖关系,这是因为缓存数据某些分区所在的节点有可能会有故障,例如内存溢出或者节点损坏。

这时候可以根据血缘关系重新计算这个分区的数据。

#cache缓存到内存中,使用存储级别 MEMORY_ONLY。
#MEMORY_ONLY意味着如果内存存储不下,放弃存储其余部分,需要时重新计算。
a = sc.parallelize(range(10000),5)
a.cache()
sum_a = a.reduce(lambda x,y:x+y)
cnt_a = a.count()
mean_a = sum_a/cnt_aprint(mean_a)#persist缓存到内存或磁盘中,默认使用存储级别MEMORY_AND_DISK
#MEMORY_AND_DISK意味着如果内存存储不下,其余部分存储到磁盘中。
#persist可以指定其它存储级别,cache相当于persist(MEMORY_ONLY)
from  pyspark.storagelevel import StorageLevel
a = sc.parallelize(range(10000),5)
a.persist(StorageLevel.MEMORY_AND_DISK)
sum_a = a.reduce(lambda x,y:x+y)
cnt_a = a.count()
mean_a = sum_a/cnt_aa.unpersist() #立即释放缓存
print(mean_a)

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

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

相关文章

层次式架构设计理论与实践

层次式体系结构概述 软件体系结构为软件系统提供了结构、行为和属性的高级抽象&#xff0c;由构成系统的元素描述这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。 层次式体系结构的每一层最多只影响两层&#xff0c;同时只要给相邻层提供相同的接口&#xff…

禁用win10自动更新

services.msc——Windows Update——常规——启动类型——禁用 services.msc——Windows Update——恢复——三个无操作&#xff0c;9999天。 gpedit.msc——计算机配置——管理模板——Windows组件——Windows更新——配置自动更新——已启用——2-通知下载和自动更新 Windows…

如何参与github开源项目并提交PR

&#x1f47d;System.out.println(“&#x1f44b;&#x1f3fc;嗨&#xff0c;大家好&#xff0c;我是代码不会敲的小符&#xff0c;目前工作于上海某电商服务公司…”); &#x1f4da;System.out.println(“&#x1f388;如果文章中有错误的地方&#xff0c;恳请大家指正&…

高速公路定向广播(声光一体) HT-600D

1、产品概述&#xff1a; HT-600D声光一体平面波IP定向广播是北京恒星科通创新性研发产品&#xff0c;采用公司自主研发的平面波传声技术&#xff0c;该产品具有高声压、强指向性、高清晰度等特点&#xff0c;采用定向声传声技术将声音聚集到正前方定向传输,周边声压级明显降低…

BTC系列-系统学习铭文(二)-序数理论

Ordinals的BIP: https://github.com/ordinals/ord/blob/master/bip.mediawiki 序数理论概述 序数是一种比特币的编号方案&#xff0c;允许跟踪和转移单个聪。这些数字被称作序号。比特币是按照它们被挖掘的顺序编号的&#xff0c;并从交易输入转移到交易输出&#xff08;遵循先…

面试题:对已经关闭的channel进行读写

在Go语言中对已经关闭的channel进行读写&#xff0c;结果会有所不同。 读操作 我们可以安全地从一个已经关闭的channel中进行读取数据。如果channel中还有未读取的数据&#xff0c;读操作将成功并返回数据以及一个用于表示数据是否有效的标记(如果channel已经关闭并且该数据有…

YOLOV10实时端到端目标检测

代码地址&#xff1a;GitHub - THU-MIG/yolov10: YOLOv10: Real-Time End-to-End Object Detection 论文地址&#xff1a;https://arxiv.org/pdf/2405.14458 本文介绍了YOLO系列目标检测器在实时和高效方面的优势&#xff0c;但是仍然存在一些缺陷&#xff0c;包括依赖非极大值…

[240525] VMware Pro 个人可免费使用 | 人机交互角度 解释 AI 同事出错虽多但深得青睐之奥义

目录 VMware Workstation Pro 个人可免费使用人机交互研究 ChatGPT 52%回答失实&#xff0c;78%逻辑不一致然却备受青睐之奥义 VMware Workstation Pro 个人可免费使用 VMware 宣布 Fusion Pro&#xff08;Mac&#xff09;和 Workstation Pro&#xff08;Windows 和 Linux&…

纯度高的安卓和混血安卓

安卓阵营纯安卓和改装安卓&#xff0c;纯安卓好用&#xff0c;权限控制力度做到很小&#xff0c;每相权限都交用户控制&#xff0c;权限控制层面可以精确到文件夹和文件&#xff0c;剪切板读和写&#xff0c;而且有精确权限追踪功能&#xff0c;国产高度定制安卓系统只有粗糙访…

React useState修改对象

在 React 中&#xff0c;useState 是一个 Hook&#xff0c;它可以让函数组件拥有状态。当想要改变一个对象类型的状态时&#xff0c;我们需要使用展开运算符&#xff08;...&#xff09;或者 Object.assign 来确保状态是正确地更新。 以下是一个使用 useState 来更新对象的例子…

webstorm新建vue项目相关问题

前言 这个迭代后端需求偏少&#xff0c;前端code的键盘都起火星子了。来了4个外包支持&#xff0c;1个后端3个前端&#xff0c;还是不够用啊。刚好趁这个机会稍微学习下vue&#xff0c;其实之前环境也配置过了&#xff0c;所以这里就不分享环境配置了&#xff0c;主要分享下新建…

基于单片机电梯控制系统设计与实现

摘 要: 介绍了电梯控制系统架构 &#xff0c; 指出了该系统的硬件设计和控制系统的软件设计以及系统调试 &#xff0c; 使系统可根据按键 要求完成载客任务&#xff0c;为电梯控制系统的优化提供了参考 。 关键词 : 电梯控制 ; 单片机 ; 系统设计 0 引言 在高层建筑中发挥…

Java开发大厂面试第22讲:Redis 是如何保证系统高可用的?它的实现方式有哪些?

高可用是通过设计&#xff0c;减少系统不能提供服务的时间&#xff0c;是分布式系统的基础也是保障系统可靠性的重要手段。而 Redis 作为一款普及率最高的内存型中间件&#xff0c;它的高可用技术也非常的成熟。 我们今天分享的面试题是&#xff0c;Redis 是如何保证系统高可用…

GPT-4o之多模态

前言 想必&#xff0c;很多小伙伴都知道GPT-4o已经发布了&#xff0c;一手基于多模态的问答显示&#xff0c;看起来挺厉害的&#xff08;也就是看起来&#xff0c; &#xff09;。然后&#xff0c;我就顺手看了看什么是多模态。 简介 多模态&#xff08;Multimodal&#xff…

什么是组态?什么是工业控制中的组态软件?

随着工业4.0和智能制造的发展&#xff0c;工控软件的应用越来越广泛&#xff0c;它们在提高生产效率、降低能耗和减少人力成本等方面发挥着越来越重要的作用。 什么是工控软件&#xff1f; 工控软件是指用于工业控制系统的软件&#xff0c;主要应用于各种生产过程控制、自动化…

标准库算法

欢迎访问我的博客首页。 标准库算法 1. 查找对象的算法2. 其它只读算法3. 二分搜索算法4. 写容器元素的算法5. 划分与排序算法6. 通用重排操作7. 排列算法8. 有序序 列的 集合算法9. 最 小值和 最大值10. 数值算法11. 参考 Pred 表示返回值为布尔类型的可调用对象。 1. 查找对…

Python序列的概念与使用-课后作业[python123题库]

序列的概念与使用-课后作业 一、单项选择题 1、关于Python组合数据类型&#xff0c;以下描述错误的是&#xff1a;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬…

Flutter 中的 DecoratedBox 小部件:全面指南

Flutter 中的 DecoratedBox 小部件&#xff1a;全面指南 在Flutter中&#xff0c;DecoratedBox是一个功能丰富的小部件&#xff0c;它为子组件提供了多种装饰效果&#xff0c;如背景色、边框和阴影。通过DecoratedBox&#xff0c;你可以轻松地为任何小部件添加装饰&#xff0c…

PLSQL连接Linux Oracle21c

PLSQL连接Linux Oracle21c 一、安装PLsql 下载官网 https://www.allroundautomations.com/registered-plsqldev/ 二、Oracle Instant Client下载 使用plsql连接oracle的时候是需要本地先安装oracle客户端&#xff0c;英文名就是Oracle Instant Client。 官方下载地址&…

初出茅庐的小李博客之用MQTT.fx软件进行消息发布与订阅【 基于EMQX Cloud】

MQTT.fx软件使用简单介绍 MQTT.fx 的软件界面如下图所示&#xff0c;最上方为 MQTT Broker 连接地址栏&#xff0c;及其连接配置。其下方功能 Tabs 含有 Publish 发布栏、Subscribe 订阅栏、Scripts 脚本栏、Broker Status 状态消息栏、Log 日志信息控制栏。 连接之前要明确几…