首页 > 其他分享 >学习笔记3

学习笔记3

时间:2024-01-12 22:33:39浏览次数:18  
标签:依赖 join 分区 笔记 学习 RDD 操作 转换

RDD概念/特性
许多迭代式算法(比如机器学习、图算法等)和交互式数据挖掘工具,共同之处是不同计算阶段之间会重用中间结果, MapReduce框架把中间结果写入到稳定存储(如磁盘)中,带来大量的数据复制、磁盘IO和序列化开销。

RDD就是为了满足这种需求而出现的,它提供了一个抽象的数据架构,开发者不必担心底层数据的分布式特性,只需将具体的应用逻辑表达为一系列转换处理,不同RDD之间的转换操作形成依赖关系,可以实现管道化,避免中间数据存储。一个RDD就是一个分布式对象集合,本质上是一个只读的分区记录集合,每个RDD可分成多个分区,每个分区就是一个数据集片段,并且一个RDD的不同分区可以被保存到集群中不同的节点上,从而可以在集群中的不同节点上进行并行计算。

RDD提供了一种高度受限的共享内存模型,即RDD是只读的记录分区的集合,不能直接修改,只能基于稳定的物理存储中的数据集创建RDD,或者通过在其他RDD上执行确定的转换操作(如map、join和group by)而创建得到新的RDD。

RDD提供了丰富的操作以支持常见数据运算,分“转换”(Transformation)和“动作”(Action)两种类型;RDD提供的转换接口都非常简单,都是类似map、filter、groupBy、join等粗粒度的数据转换操作,而不是针对某个数据项的细粒度修改(不适合网页爬虫),表面上RDD的功能很受限、不够强大,实际上RDD已经被实践证明可以高效地表达许多框架的编程模型(比如MapReduce、SQL、Pregel);Spark用Scala语言实现了RDD的API,程序员可以通过调用API实现对RDD的各种操作

RDD典型的执行过程如下,这一系列处理称为一个Lineage(血缘关系),即DAG拓扑排序的结果:

RDD读入外部数据源进行创建;
RDD经过一系列的转换(Transformation)操作,每一次都会产生不同的RDD,供给下一个转换操作使用;
最后一个RDD经过“动作”操作进行转换,并输出到外部数据源优点:惰性调用、管道化、避免同步等待、不需要保存中间结果、操作简单;
Spark采用RDD以后能够实现高效计算的原因主要在于:

(1)高容错性:血缘关系、重新计算丢失分区、无需回滚系统、重算过程在不同节点之间并行、只记录粗粒度的操作;

(2)中间结果持久化到内存:数据在内存中的多个RDD操作之间进行传递,避免了不必要的读写磁盘开销;

(3)存放的数据是Java对象:避免了不必要的对象序列化和反序列化;

RDD依赖关系
Spark通过分析各个RDD的依赖关系生成了DAG,并根据RDD 依赖关系把一个作业分成多个阶段,阶段划分的依据是窄依赖和宽依赖,窄依赖可以实现流水线优化,宽依赖包含Shuffle过程,无法实现流水线方式处理。

窄依赖表现为一个父RDD的分区对应于一个子RDD的分区或多个父RDD的分区对应于一个子RDD的分区;宽依赖则表现为存在一个父RDD的一个分区对应一个子RDD的多个分区。

逻辑上每个RDD 操作都是一个fork/join(一种用于并行执行任务的框架),把计算fork 到每个RDD 分区,完成计算后对各个分区得到的结果进行join 操作,然后fork/join下一个RDD 操作;

RDD Stage划分:Spark通过分析各个RDD的依赖关系生成了DAG,再通过分析各个RDD中的分区之间的依赖关系来决定如何划分Stage,具体方法:

在DAG中进行反向解析,遇到宽依赖就断开;
遇到窄依赖就把当前的RDD加入到Stage中;
将窄依赖尽量划分在同一个Stage中,可以实现流水线计算;

标签:依赖,join,分区,笔记,学习,RDD,操作,转换
From: https://www.cnblogs.com/liucaizhi/p/17961718

相关文章

  • Python第一天学习笔记
    今日学习内容1.什么是编程2.计算机组成原理3.计算机操作系统4.编程语言是什么什么是编程什么是编程语言编程语言是什么:人与计算机交流的介质什么是编程编程:利用编程语言写出一个个文件,这堆文件会达到一个目的编程有什么用就像近代奴隶主奴役黑奴干活一样,我们的目的是奴......
  • 刷题笔记——队列(C++)
    1696.跳跃游戏VI-力扣(LeetCode)给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。一开始你在下标 0 处。每一步,你最多可以往前跳 k 步,但你不能跳出数组的边界。也就是说,你可以从下标 i 跳到 [i+1,min(n-1,i+k)] 包含 两个端点的任意位置。你的目标是......
  • 读元宇宙改变一切笔记06_虚拟世界引擎
    1. 一棵虚拟的树在虚拟森林里倒下了1.1. 它们都是数据和代码1.2. 数据可以描述虚拟对象的属性1.2.1. 尺寸或颜色1.3. 为了让我们的树由CPU处理并由GPU渲染,这些数据需要通过代码运行1.4. 该代码必须是运行虚拟世界的更广泛代码框架的一部分2. 现实世界2.1. 现实世......
  • 学习进度笔记3
    今天与小组成员进行了讨论,确定了最终的选题和小组成员,我们修改了选题为医疗保险欺诈识别监测模型要求:开发一套医疗保险欺诈识别监测模型,帮助医保部门实现对各类医疗保险基金欺诈违规行为的准确识别,以进一步丰富现行医保智能监控的医保规则和医学规则,提高医保智能监控的针对性和......
  • 学习进度笔记三
    实验五:SparkSQL编程初级实践实验六:SparkStreaming编程初级实践实验七:Spark机器学习库Mtlib编程实践今日总结完成了全部的实验内容,之后就回归正轨啦~~~......
  • 1.12学习进度
    Shape类有一个具体方法moveTo和一个抽象方法zoom,其中moveTo将图形从当前位置移动到新的位置,各种具体图形的moveTo可能会有不一样的地方。zoom方法实现对图形的放缩,接受一个浮点型的放缩倍数参数,不同具体图形放缩实现不一样。继承Shape类的具体图形类型包括直线类Li......
  • openGauss学习笔记-195 openGauss 数据库运维-常见故障定位案例-分析查询语句运行状态
    openGauss学习笔记-195openGauss数据库运维-常见故障定位案例-分析查询语句运行状态195.1分析查询语句运行状态195.1.1问题现象系统中部分查询语句运行时间过长,需要分析查询语句的运行状态。195.1.2处理办法以操作系统用户omm登录主机。使用如下命令连接数据库。gs......
  • Fpga开发笔记(一):高云FPGA芯片介绍,入手开发板套件、核心板和底板介绍
    前言  FPGA作为一种逻辑芯片,硬件架构独特,具有并行性、低延时性和灵活性等特性,应用领域广泛。  FPGA市场主要玩家是英特尔、AMD、莱迪思、Microchip、Achronix等;国内厂商包括复旦微电、紫光国微、安路科技、东土科技、高云半导体、京微齐力、京微雅格、智多晶、遨格芯等。 ......
  • 【深度学习】一维数组的 K-Means 聚类算法理解
    刚看了这个算法,理解如下,放在这里,备忘,如有错误的地方,请指出,谢谢需要做聚类的数组我们称之为【源数组】需要一个分组个数K变量来标记需要分多少个组,这个数组我们称之为【聚类中心数组】及一个缓存临时聚类中心的数组,我们称之为【缓存聚类中心数组】然后初始化一个K长度的数组,值随机(尽......
  • 关于html表格学习
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title>&l......