SparkCore的相关概念

1、Spark的RDD算子

RDD算子的概念和分类
1、1 Transformation算子
定义:RDD算子,返回值仍是一个RDD的,称之为转换算子
特性:这类算子是lazy懒加载的。如果没有Action算子,转换算子是不工作的。
1、2 Action算子
定义:返回值不是RDD的就是Action算子。
1、3 总结
对于这2类算子来讲,Transformation算子相当于在构建工作执行计划,action相当于是一个指令让这个执行计划开始工作。
如果没有action算子,Transformation算子之间的迭代关系,就相当于一个没有通电的流水线,只有action到来,这个数据处理的流水线才开始工作。
2、常用Transformation算子
2、1 map算子
功能:将RDD的数据一条一条的处理(基于map算子中接收的处理函数),返回新的RDD。
words_rdd.map(lambda x:(x,1))
2、2 flatMap算子
功能:对rdd执行map操作,然后进行接触嵌套操作。如:
file_rdd.flatMap(lambda line:line.split(" "))
实例:
嵌套的list:lst=[[1,2,3],[4,5,6],[7,8,9]]
接触嵌套的list:lst=[1,2,3,4,5,6,7,8,9]
2、3 reduceByKey算子
功能:针对KV型RDD,自动按照key分组,根据你提供的聚合逻辑,完成组内数据(value)的聚合
2、4 mapValues算子
功能:针对二元元组RDD,对其内部的二元元组的value执行map操作
2、5 groupBy算子
功能:将RDD的数据进行分组
2、6 filter算子
功能:过滤不想要的数据,保留想要的数据
2、7 distinct算子
功能:对RDD数据进行去重,返回一个RDD
2、8 union算子
功能:2个RDD合并返回一个RDD
2、9 join算子
功能:对2个RDD执行join操作(可实现SQL内\外连接),只能用于KV型二元元组。按照二元元组的key进行关联
2、10 intersection算子
功能:求2个RDD的交集,返回1个新的RDD
2、11 glom算子
功能:将RDD的数据加上嵌套,这个嵌套按照分区来进行。如:[1,2,3,4,5]嵌套后[[1,2,3],[4,5]]
2、12 groupByKey算子
功能:针对KV型RDD,自动按照key进行分组
2、13 常见面试题:groupByKey和reduceByKey区别:
2、13、1 功能上区别

	2、13、1、1groupByKey仅有分组功能
	2、13、1、2reduceByKey除了又ByKey的分组功能,还有reduce的聚合功能

2、13、2 性能上区别

	2、13、2	、1	如果对数据进行分组+聚合,reduceByKey性能要优于groupByKey。主要原因是reduceByKey自带聚合逻辑

	先在分区内做预聚合
	然后再走分组流程(shuffle)
	分组后再做最终聚合
	2、13、2	、2	数据越大,reduceByKey性能优势越明显

2、14 sortBy算子
功能:对RDD数据进行排序,基于你指定的排序依据
sortByKey算子
功能:针对KV型RDD,按照Key进行排序
3、常用Action算子
3、·1 countByKey算子
功能:统计key出现的次数(一般适用于KV型RDD)
3、2 collect算子
功能:将RDD各个分区内的数据,统一收集到driver中,形成一个list对象
用法:rdd.collect()
3、3 reduce算子
功能:对RDD数据集按照你传入的逻辑进行聚合
3、4 fold算子
功能:和reduce一样,接收传入逻辑进行聚合,聚合是带有初始值的
3、5 first算子
功能:取出RDD的第一个元素
3、6 take算子
功能:取RDD的前N个元素,组合成list返回给你
3、7 top算子
功能:对RDD数据集进行降序排序,取前N个
3、8 count算子
功能:计算RDD有多少条数据,返回值是一个数字
3、9 takeSample算子
功能:随机抽样RDD的数据
3、10 takeOrdered算子
功能:对RDD进行排序取前N个
3、11 foreach算子
功能:对RDD中的每一个元素,执行你提供的逻辑操作(类似map),但没有返回值
3、12 saveAsTextFile算子
功能:将RDD的数据写入到文本文件中
4、分区操作算子
4、1 分区mapPartitions算子
功能:mapPartition算子一次被传递的是一整个分区数据,作为一个迭代器对象传递过来。而map每次被传递是一条数据,性能较map比较有优势
4、2 foreachPartition算子
功能:和foreach算子一样,一次处理一整个分区的数据
4、3 partitionBy算子
功能:对RDD进行自定义分区操作
4、4 repartition算子
功能:对RDD的分区执行重新分区(仅数量)
在这里插入图片描述

5、RDD的持久化
RDD数据是过程数据
RDD之间相互迭代计算(Transformation的转换),当执行开启后,新的RDD生成,代表旧的RDD将消失
RDD的数据是过程数据,只在处理的过程中存在,一旦处理完成就不见了
这个特性可以最大化利用计算机资源,老旧RDD不用了就会从内存中被清理,为后续计算腾出内存资源
在这里插入图片描述

RDD的缓存
在这里插入图片描述

checkPoint技术
将RDD数据缓存起来,仅支持硬盘存储
它被设计认为是安全的
不保留血缘关系
checkPoint存储RDD数据,是集中收取各个分区的数据进行存储,而缓存是分散存储
缓存和checkPoint对比
checkPoint不管分区数量是多少,风险是一样的;缓存的分区越多,风险越高
checkPoint支持写入hdfs,而缓存不行,hdfs是高可靠存储,被认为是安全的
checkPoint不支持写内存,缓存可以,缓存如果写内存性能要优于checkPoint
checkPoint设计被认为是安全的,不保留血缘关系,而缓存被认为是不安全的所以保留
6、共享变量
广播变量
将本地变量list标记为广播变量即可
broadcast = sc.broadcast(std_info_list)
使用广播变量,从broadcast对象中取出本地list对象即可
value = broadcast.value
注意:也就是先放进去broadcast内部,然后再从broadcast内部取出来使用,中间传输的就是broadcast这个对象了。只要传输的是broadcast对象,spark就会留意,只会给每个executor发一份,而不是给每个分区都发。
场景:本地集合对象和分布式集合对象(RDD)进行关联的时候,需要将本地集合对象共享为广播变量,可以节省:网络I/O次数和executor的内存
累加器变量
构建方法:acmlt = sc.accumulator(0)
总结
广播变量解决什么问题?
分布式集合RDD和本地集合关联的时候,降低内存占用及减少网络I\O传输,提高性能
累加器解决什么问题?
分布式代码执行中,进行全局累加
7、DAG
有向无环图
一个Action算子会产生一个DAG,如果在代码中有3个Action就会产生3个DAG,如下图:
一个Action算子产生一个Job(一个应用程序内的子任务),每个Job都有各自的DAG
在这里插入图片描述

宽窄依赖和阶段划分
宽窄依赖
窄依赖:父RDD的一个分区,全部将数据分发给子RDD的一个分区
宽依赖(shuffle):父RDD的一个分区,将数据分发给子RDD的多个分区
阶段划分
根据DAG,会按照宽依赖,划分不同的阶段。
划分依据:从后向前,遇到宽依赖,就划分出一个阶段,称之为stage。
在这里插入图片描述

内存迭代计算
在这里插入图片描述

Spark是怎么做内存计算的?DAG的作用?Stage划分的作用?
Spark会产生DAG图
DAG图会基于分区和宽窄依赖关系划分Stage阶段
一个阶段内部都是窄依赖,窄依赖内部如果形成前后1:1的分区对应关系,就可以产生许多内存迭代计算的管道
这些内存迭代计算的管道,就是一个个具体执行的task
一个task就是一个具体的线程,一个任务跑在一个线程内,就是走内存计算了。
Spark为什么比MapReduce计算快?
Spark算子丰富,MapReduce算子匮乏(Map和Reduce),MapReduce编程模型很难在一套MR中处理复杂的任务,需要编写很多套串联的MR任务,多个MR串联通过磁盘交互数据
Spark可以执行内存迭代计算,算子之间形成的DAG基于宽依赖划分阶段后,在阶段内部形成内存迭代计算管道,但是MapReduce的Map和Reduce之间的交互依然是通过磁盘来交互的
Spark并行度
Spark的并行:同一时间内,有多少个task同时执行
并行度设置:代码中、配置文件中及提交程序的客户端参数中,优先级从高到低:代码中->客户端提交参数中->配置文件中。默认是1,但不会全部以1来跑,多数时候会根据读取文件的分片数量来作为默认并行度。
spark.default.parallelism = 100
并行度设置:建议设置为CPU核心的2-10倍
Spark任务调度
Driver被构建出来
构建Sparkcontext(执行环境入口对象)
基于DAG Scheduler(DAG调度器)构建逻辑Task分配
基于Task Scheduler(Task调度区)将逻辑Task分配到各个Executor上干活并监控他们
Worker(Executor)被Task Scheduler管理监控,听从他们的指令干活,并定期汇报进度

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

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

相关文章

做了一个日内信号可视化系统

量化策略开发,高质量社群,交易思路分享等相关内容 大家好,半年过去了。松鼠Quant计划6月内发布本年度最重要的一个策略:盘口策略。这个策略群友们的呼声很高,也是花了比较多时间去弄。整个策略有多个python脚本: CTP数据生成order…

部署和配置DHCP服务器实验:自动分配IP地址和网络配置

部署和配置DHCP服务器实验:自动分配IP地址和网络配置 【实验目的】 部署DHCP服务器。熟悉DHCP服务器的配置方法。验证拓扑。 【实验拓扑】 实验拓扑如图所示。 设备参数如下表所示。 设备 接口 IP地址 子网掩码 默认网关 DHCPSERVE F0/0 172.16.10.1 25…

数据安全--16--数据采集阶段安全防护措施

本博客地址:https://security.blog.csdn.net/article/details/131033616 一、引子 数据采集阶段的安全防护措施主要是从三个方面来开展的,第一个是从个人数据主体采集方面,第二个是从外部机构采集方面,以上两个方面基本涵盖了数…

Bitmiracle Docotic.Pdf 9.015 Crack

Docotic.Pdf 库是正确的法语和强大的编程和界面,可以让用户和开发人员创建专业和高质量的 PDF 文件,甚至可以阅读和修改那些已经存在的。它具有干净而强大的编程接口,能够帮助用户创建质量非常好的 PDF 文档。在这个库的帮助下,用…

CMake学习(1): CMake基本使用

https://subingwen.cn/cmake/CMake-primer/ 1. CMake 概述 CMake是一个项目构建工具,并且是跨平台的。Cmake跟Makefile其实是差不多的,只不过makefile更底层些。大多是 IDE 软件都集成了 make,比如:VS 的 nmake、linux 下的 GNU…

python之函数(参数,匿名函数,局部变量和全局变量)

文章目录 前言一、函数的参数 1、形参和实参2、必传参数(也叫:必须参数)3、关键字传参4.、默认参数5、不定长参数6、传参的顺序二、匿名函数(lambda函数) 1. 定义及特点语法格式2. lambda函数的特点三、函数返回值retu…

【测试开发】实训记录日志

软件测试系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 了解测试开发和软件测试 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 …

SSD源码总结

一、生成默认框 默认框的宽高 默认框的宽高是相对于原图的尺寸计算出来的。 默认框的中心 默认框的中心是相对于特征图的尺寸计算出来的。 二、将真实框分配给默认框 1、区分正负样本 1.1、选取正样本 计算真实框(bboxs)与每个默认框(…

SpringMVC-【回顾】

回顾MVC架构 什么是mvc:模型、视图、控制器 -----软件设计规范 回顾servlet maven项目导入依赖(webmvc,servlet-api,jsp-api,jstl,junit)创建子模块,在子模块中添加框架支持(在子模块中导入依赖jsp、servlet【因为父…

2018 年一月联考逻辑真题

2018 年一月联考逻辑真题 三、逻辑推理:第 26-55 小题,每小题 2 分,共 60 分。下列每題给出的A.、 B.、C.、D.五个选项中,只有一项是符合试题要求的。请在答题卡上将所选项的字母涂黑。 真题(2018-26)-翻译…

区块链的基本介绍

目录 1、简介 2、区块链的分类 2.1 公有链 2.2 联盟链 2.3 私有链 3、区块链特征 4、区块链结构 5、区块链对记账权利的分配方式 5.1 POW 5.2 PoS 5.3 DPoS 6、Defi、NFT、 gameFi 7、DAPP 7.1 DAPP 的核心要素 8、比特币 8.1 比特币简介 8.2 比特币数字签名…

基站机房:保障通信网络稳定,如何解决安全隐患?

基站机房作为无线通信网络的关键组成部分,承载着大量的网络设备和通信设施,对于运营商和通信服务提供商来说具有重要意义。 无论是大型运营商还是通信服务提供商,动环监控系统都将成为他们成功运营和管理通信网络的关键工具。 客户案例 案例…

Java学习路线(22)——测试框架Junit

一、单元测试概念 单元测试就是针对最小的功能单元编写测试代码,Java程序最小的功能单元是方法,因此,单元测试就是针对Java方法的测试,进而检查方法正确性。 二、Junit测试框架 (一)概念: Jun…

HBase:(三)HBase API

HBase:(一)安装部署_只爱大锅饭的博客-CSDN博客hbase部署安装https://blog.csdn.net/qq_35370485/article/details/130988364?spm1001.2014.3001.5501 1.创建maven项目 2.添加依赖 <dependency><groupId>org.apache.hbase</groupId><artifactId>hba…

【Java基础】注解与反射

一、学习笔记 &#xff08;本文内容基本源自参考链接1视频教程&#xff09; 1、注解的含义 1&#xff09;注解&#xff08;annotation)是从jdk5.0开始引入的新技术&#xff0c;其作用&#xff1a;不是程序本身&#xff0c;可对程序作解释&#xff08;该作用与注释comment相同…

MFC(十二)多个对话框

我们来制定多个对话框&#xff0c;每个对话框都有不同的功能&#xff0c;单击下一步&#xff0c;即可跳转到下一个对话框 1.新建一个启动按钮 2.在资源视图&#xff0c;Dialog里面&#xff0c;右键-->添加资源---->dialog>选择IDD PROPPAGE_SMALL新建 属性页&#…

同浏览器下多窗口进行跨源通信、同源通信

同浏览器下多窗口进行跨源通信、同源通信 多页面通信运用到了“发布订阅”的设计模式&#xff0c;一个页面发布指令&#xff0c;其他页面进行订阅并进行相应的行为操作&#xff01; 一、跨源通信 window.postMessage() window.postMessage() 方法可以安全地实现跨源通信。通常…

Vue.js 中的数据双向绑定是如何实现的?

Vue.js 中的数据双向绑定是如何实现的&#xff1f; Vue.js 是一款流行的前端框架&#xff0c;它的核心功能之一是数据双向绑定。本文将介绍 Vue.js 中数据双向绑定的实现原理&#xff0c;并附上相关代码实例。 什么是数据双向绑定&#xff1f; 在传统的前端开发中&#xff0c…

智能应用搭建平台——LCHub低代码表单 vs 流程表单 vs 仪表盘

1. LCHub低代码如何选择 「流程表单」:填报数据,并带有流程审批功能,适合报销、请假申请或其他工作流; 「表单」:填报数据,并带有数据协作功能,如修改、删除、导入、导出,并可以给不同的人不同的管理权限; 「仪表盘」:数据分析处理、结果展示功能,如数据汇总、趋…

JavaSSM笔记(一)

**建议&#xff1a;**对Java开发还不是很熟悉的同学&#xff0c;最好先花费半个月到一个月时间大量地去编写小项目&#xff0c;不推荐一口气学完&#xff0c;后面的内容相比前面的内容几乎是降维打击&#xff0c;一口气学完很容易忘记之前所学的基础知识&#xff0c;尤其是Java…
最新文章