2024.1.4 Spark Core ,RDD ,算子

 

目录

一 . RDD(弹性分布式数据集)

二 . RDD的五个特性

三 .RDD的五大特点

 四 . 算子  

 五 .  分区算子 ,重分区算子 , 聚合算子 ,关联算子

分区算子:

重分区算子

聚合算子

关联算子:


一 . RDD(弹性分布式数据集)

Resilent弹性    Distrbuted分布式        Dataset数据集

1. rdd是Spark底层的数据结构 

2. Task 在Spark中就是线程 

3 . RDD中的一个分区就是一个线程,分区数有多少线程数就有多少   ,set Master local里设置的就是线程

4. 使用 sc.parallelize(result)构建rdd,他的分区数量是受setMaster的local数影响的,你设置多少个就是多少分区 ; 如果这里写local[*],就会默认分区数是cpu核数  ;   如果在参数里有设置numslices, name就以参数的这个数量为分区数

5. 使用 sc.textfile构建RDD , 把setMaster 的local[]的值设置大于2的时候,不生效,分区的数量还是2  , 但是调小会生效 ;

在minPartitions里没有设置参数,那么一般就根据公式min(spark.default.parallelism,2)

在参数里设置 minPartitions, 这个参数设置的是最小分区的,所以得出来分区数是大于等于minPartitions设置的数的, 个别情况底层也会有优化,钥匙设置100,可能会出来36, 总之到底是多少没法保证 ;

6. 使用wholeTextFile 构建RDD, setMaster 的local 数量 ,minPartitions , 文件的具体数量 ,都会影响分区的数量, 当设置了minPartitions的时候,最大的分区数量为 文件的最大数量

# 查看分区数的命令

data = [1,2,3,4,5,6]
init_rdd = sc.parallelize(data)
print(init_rdd.getNumPartitions())

# 查看分区数
init_rdd = sc.textFile( 'file:///export/data/2024.1.2_Spark/1.2_day01/content.txt'  , minPartitions=10  )

 7 .RDD 的分区数据量受到多个因素,例如:机器Cpu的核数 , 调用的算子 , 算子中参数的设置, 集群的类型等 . 实际中一般设置分区数量为cpu核数的两到三倍, 其目的是为了防止类似数据倾斜等现象,一个服务器忙死一个闲死 ; 

二 . RDD的五个特性

1、(必须的)RDD是有一系列分区组成的
2、(必须的)对RDD做计算,相当于对RDD的每个split或分区做计算
3、(必须的)RDD之间存在着依赖关系,宽依赖和窄依赖
4、(可选的)对于KV类型的RDD,我们可以进行自定义分区方案
5、(可选的)移动数据不如移动计算,让计算程序离数据越近越好

三 .RDD的五大特点

1、分区:RDD逻辑上是分区的,仅仅是定义分区的规则,并不是直接对数据进行分区操作,因为RDD本身不存储数据。
2、只读:RDD是不可变类型,RDD是只读的,要想改变RDD中的数据,只能在现有的RDD基础上创建新的RDD。
3、依赖:RDD之间存在着依赖关系,宽依赖和窄依赖
4、缓存:如果在应用程序中多次使用同一个RDD,可以将该RDD缓存起来,该RDD只有在第一次计算的时候会根据血缘关系得到分区的数据
5、checkpoint:与缓存类似的,都是可以将中间某一个RDD的结果保存起来,只不过checkpoint支持持久化保存,检查点成为了Spark的容错性,持久化

      

 四 . 算子  

RDD对象中提供了非常多的具有特殊功能的函数,我们将这些函数称为算子(函数/方法/API)

Spark算⼦有两类,分别是transformation算⼦和action算⼦。

Transformation算⼦有:map,mapPartitions,groupBy,filter,distinct,repartition,union,

reduceByKey,groupByKey,Join,aggregateByKey等。

Action算⼦有:reduce,collect,count,save,countByKey,aggregate,take。

 在代码执行时,transfor的算子直接打印不会有结果,需要加.collect  ;  action算子就可以直接打印

 

 flatmap和map的区别 :         flatmap把split切分后的东西全部放在了一起 , map就只是一对一的

在打印输出的时候如果返回的是可迭代对象,就要在算子后面加 .mapValues(list).collect()

 五 .  分区算子 ,重分区算子 , 聚合算子 ,关联算子

分区算子:

Map和mapPartitions的区别?
1) Map :每次处理⼀条数据
2) mapPartitions :每次处理⼀个分区数据

  

假如有10亿个数据要处理

foreach  一次处理10亿个

foreachPartition       10次处理,每次循环处理1亿个.

如果有反复消耗资源的操作,比如打开和关闭文件 ,数据库的关闭和连接 , 能够减少操作的次数

如果没有反复消耗资源的操作,那两种方法都一样

重分区算子

repartitions :重新修改RDD分区数, 可以增大和减少,只要有向无环图中间有两个stage,那stage之间就进行了shuffle过程,底层起始也是调用了coalesce, shuffle默认设了True ; 

 coalesce : 默认情况下减少RDD分区数 ,不会shuffle, shuffle过程会慢  ,在后面 传入参数shuffle = True ,就可以增加RDD分区数

rdd.coalesce(5,shuffle=True)

partition by 算子 : 该算子主要是用来改变key-value键值对数据类型RDD的分区数的。num表示要设置的分区数;fn参数是可选,用来让用户自定义分区规则。

聚合算子

        reduce():根据传入的函数对数据进行聚合处理

        fold:

        aggregate:

reduceByKey:具有预聚合操作
groupByKey:没有预聚合
在不影响业务逻辑的前提下,优先采⽤reduceByKey。

关联算子:

  • join:实现两个RDD的join关联操作

  • leftOuterJoin:实现两个RDD的左关联操作

  • rightOuterJoin:实现两个RDD的右关联操作

  • fullOuterJoin:实现两个RDD的满外(全外)关联操作

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

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

相关文章

vue day5

1、自定义指令 2、v-loading指令封装&#xff08;蒙层&#xff09; 3、插槽 默认插槽 使用组件时&#xff0c;传入具体标签内容 4、插槽 后备内容&#xff08;默认值&#xff09; 5、具名插槽 6、作用域插槽 7、案例 App.vue&#xff1a; <template><d…

ubuntu桥接方式上网

vmvare:VMware Workstation 17 Pro ubuntu: Ubuntu 14.04.6 LTS window10 下面是我的电脑配置 下面是ubuntu虚拟机的配置 vi /etc/network/interfaces 下面的gateway就是window -ipconfig 截图里的默认网关 auto lo iface lo inet loopbackauto eth0 iface eth0 inet stat…

前端实战第一期:悬浮动画

悬浮动画 像这样的悬浮动画该怎么做&#xff0c;让我们按照以下步骤完成 步骤&#xff1a; 先把HTML内容做起来&#xff0c;用button属性创建一个按钮&#xff0c;按钮内写上悬浮效果 <button classbtn>悬浮动画</button>在style标签内设置样式,先设置盒子大小&…

Linux 命令tail

命令作用 tail 命令用于显示文件的末尾内容&#xff0c;默认显示文件的最后 10 行。通常情况下&#xff0c;tail 命令用于实时查看动态日志文件&#xff0c;可以使用 -f 参数跟踪文件内容的变化。 语法 tail [选项] [文件名] 参数 以 log.txt 为例演示参数效果 -n -linesK…

大数据开发的专业术语

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 系列专栏目录 [Java项…

【LeetCode:11. 盛最多水的容器 | 双指针】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

阶段十-分布式-任务调度

第一章 定时任务概述 在项目中开发定时任务应该一种比较常见的需求&#xff0c;在 Java 中开发定时任务主要有三种解决方案&#xff1a;一是使用JDK 自带的 Timer&#xff0c;二是使用 Spring Task&#xff0c;三是使用第三方组件 Quartz Timer 是 JDK 自带的定时任务工具,其…

感知与认知的碰撞,大模型时代的智能文档处理范式

目录 0 写在前面1 GPT4-V&#xff1a;拓宽文档认知边界2 大语言模型的文档感知缺陷3 大一统文档图像处理范式3.1 像素级OCR任务3.2 OCR大一统模型3.3 长文档理解与应用 4 总结抽奖福利 0 写在前面 由中国图象图形学学会青年工作委员会发起的第十九届中国图象图形学学会青年科学…

ElasticSearch使用Grafana监控服务状态-Docker版

文章目录 版本信息构建docker-compose.yml参数说明 创建Prometheus配置文件启动验证配置Grafana导入监控模板模板说明 参考资料 版本信息 ElasticSearch&#xff1a;7.14.2 elasticsearch_exporter&#xff1a;1.7.0&#xff08;latest&#xff09; 下载地址&#xff1a;http…

如何使用 Python+selenium 进行 web 自动化测试?

Selenium是一个自动化测试工具&#xff0c;它可以模拟用户在浏览器中的操作&#xff0c;比如点击、输入、选择等等。它支持多种浏览器&#xff0c;包括Chrome、Firefox、Safari等等&#xff0c;并且可以在多个平台上运行。 安装和配置Selenium 在使用Selenium之前&#xff0c;…

【VTK三维重建-体绘制】第五期 vtkLODProp3D

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ&#xff1a;870202403 前言 本文分享VTK中体绘制中的vtkLODProp3D对象&#xff0c;希望对各位小伙伴有所帮助&#xff01; 感谢各位小伙伴的点赞关注&#xff0c;小易会继续努力分享&#xff0c;一起进步&#xff01; 你的点赞…

(Java企业 / 公司项目)Nacos的怎么搭建多环境配置?(含相关面试题)(二)

上一篇讲了一个单体服务中配置&#xff0c;传统的Nacos配置但是在微服务架构当中肯定都是多环境下配置&#xff0c;比如生产环境&#xff0c;dev测试环境等等。 第一种方式模拟开始&#xff1a; 首先展示在生产环境中nacos如何配置&#xff0c;在模块下新建一个配置文件&…

达梦数据库安装超详细教程(小白篇)

文章目录 达梦数据库一、达梦数据库简介二、达梦数据库下载三、达梦数据库安装1. 解压2. 安装 四、初始化数据库五、DM管理工具 达梦数据库 一、达梦数据库简介 ​ 达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统&#xff0c;简称DM。 达梦数…

本地站点通过主备冗余专线连接上云

本地站点通过主备冗余专线连接上云 您可以使用两条物理专线以主备方式将本地数据中心IDC&#xff08;Internet Data Center&#xff09;接入阿里云。采用主备接入方式时&#xff0c;正常情况下仅主用线路在进行流量转发。阿里云按照您配置的健康检查的发包时间间隔探测主用线路…

【Midjourney】AI绘画新手教程(一)登录和创建服务器,生成第一幅画作

一、登录Discord 1、访问Discord官网 使用柯學尚网&#xff08;亲测非必须&#xff0c;可加快响应速度&#xff09;访问Discord官方网址&#xff1a;https://discord.com 选择“在您的浏览器中打开Discord” 然后&#xff0c;注册帐号、购买套餐等&#xff0c;在此不做缀述。…

uniapp+echarts开发APP版本教程

需求 需要在uniappecharts展示图表功能&#xff0c;是APP版本&#xff0c;不是小程序。找了好多教程都乱七八糟的&#xff0c;无法实现。以下是效果图 教程 1、安装插件 HBuilder安装echarts插件&#xff0c;插件地址如下。安装完成后在uni_modules/lime-echart文件夹下 ht…

微信小程序+前后端开发学习材料

目录结构 全局文件 1.app.json 文件 用来对微信小程序进行全局配置&#xff0c;决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等。文件内容为一个 JSON 对象。 1.1 page用于指定小程序由哪些页面组成&#xff0c;每一项都对应一个页面的 路径&#xff08;含文…

docker镜像仓库详解(Docker Registry)

本片文章主要是对docker的镜像仓库进行了详解。其中包含了一些常用了 docker 指令&#xff0c;通过举例进行详解。也详细解释了镜像仓库的工作机制和常见的镜像仓库。也实际拉去和运行了一些镜像。希望本篇文章会对你有所帮助&#xff01; 文章目录 一、什么是Docker Registry …

网工内推 | 事业单位、上市公司网工,五险一金补贴多

01 中科中山药物创新研究院 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1.负责信息化网络数据安全&#xff0c;加固网络安全、渗透测试、风险评估、漏洞扫描、风险管理和风险评估方法。对防火墙、IDS、IPS、蜜罐、防DDOS、VPN等设备的运行管理&#xff1b; 2.负责机…

CodeWave智能开发平台--03--目标:应用创建--01模板创建依赖问题修改

摘要 本文是网易数帆CodeWave智能开发平台系列的第03篇&#xff0c;主要介绍了基于CodeWave平台文档的新手入门进行学习&#xff0c;实现一个完整的应用&#xff0c;本文主要完成模板创建时的依赖问题解决。 CodeWave智能开发平台的03次接触 CodeWave参考资源 网易数帆Code…