Spark学习(三)之 RDD

大数据学习之Spark——04RDD概述及创建 一. RDD概述 1. 什么是RDD RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象。代码中是一个抽象类,它代表一个不可变、可分区、里面的元素可并行计算的集合。 2. RDD的五大特性 RDD是由一系列partition组成 算子(函数)是作用在RDD的partition上的 RDD之间有依赖关系 分区器是作用在k, v格式的RDD上 partition提供数据计算的最佳位置, 利于数据处理的本地化. “计算移动, 数据不移动” 阅读详情

1、什么是RDD

RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度。

2、RDD的五大特性

  • 1、RDD是由一系列的partition(分片)组成的,即数据集的基本组成单位对于RDD来说,每个分片都会被一个计算任务处理,并决定并行计算的粒度。用户可以在创建RDD时指定RDD的分片个数,如果没有指定,那么就会采用默认值。默认值就是程序所分配到的CPU Core的数目。

partition个数=split切片数≈block个数
当一个文件分3个block块,第二个最后一个汉字被分在了第二块和第三块,第三块只有一些不完整的东西,由于split切片要保证完整性,所以它会把数据分为2个切片
Spark没有读文件的方法,依赖于MR的文件的方法

  • 2、RDD提供的每一个算子实际上是作用于每一个partition上
  • 3、RDD是由一系列的依赖关系的,依赖于其他的RDD,RDD的每次转换都会生成一个新的RDD,所以RDD之间就会形成类似于流水线一样的前后依赖关系。

好处:提高容错性。当一些数据出错时,根据依赖性去找源数据,根据函数再次计算得到丢失的数据 体现出了RDD的弹性。

  • 4、可选:分区器作用在KV格式的RDD上,当前Spark中实现了两种类型的分片函数,一个是基于哈希的HashPartitioner,另外一个是基于范围的RangePartitioner。只有对于于key-value的RDD,才会有Partitioner,非key-value的RDD的Parititioner的值是None。

什么是KV格式的RDD? RDD中存储的计算逻辑的返回值是二元组

  • 5、每一个RDD都会提供一系列的最佳的计算位置,Spark在进行任务调度的时候,会尽可能地将计算任务分配到其所要处理数据块的存储位置。

好处 计算找数据 计算向数据移动 数据不移动,计算移动

3、WordCount粗图解RDD

在这里插入图片描述

4、RDD的操作算子

RDD的操作算子包括两类,一类叫做transformations,它是用来将RDD进行转化,构建RDD的血缘关系;另一类叫做actions,它是用来触发RDD的计算,得到RDD的相关计算结果或者将RDD保存的文件系统中。下图是RDD所支持的操作算子列表。
在这里插入图片描述

Transformations类算子

主要做的是就是将一个已有的RDD生成另外一个RDD。Transformation具有lazy特性(延迟加载)。Transformation算子的代码不会真正被执行。只有当我们的程序里面遇到一个action算子的时候,代码才会真正的被执行。这种设计让Spark更加有效率地运行。

map返回一个新的RDD,该RDD由每一个输入元素经过func函数转换后组成
filter返回一个新的RDD,该RDD由经过func函数计算后返回值为true的输入元素组成
flatMap类似于map,但是每一个输入元素可以被映射为0或多个输出元素(所以func应该返回一个序列,而不是单一元素)
distinct对源RDD进行去重后返回一个新的RDD
groupByKey在一个(K,V)的RDD上调用,返回一个(K, Iterator[V])的RDD
reduceByKey在一个(K,V)的RDD上调用,返回一个(K,V)的RDD,使用指定的reduce函数,将相同key的值聚合到一起,与groupByKey类似,reduce任务的个数可以通过第二个可选的参数来设置
sortByKey在一个(K,V)的RDD上调用,K必须实现Ordered接口,返回一个按照key进行排序的(K,V)的RDD
sortBy与sortByKey类似,但是更灵活 第一个参数是根据什么排序 第二个是怎么排序 false倒序 第三个排序后分区数 默认与原RDD一样
join在类型为(K,V)和(K,W)的RDD上调用,返回一个相同key对应的所有元素对在一起的(K,(V,W))的RDD 相当于内连接(求交集)
repartition重新分区 必须shuffle 参数是要分多少区 少变多
combineByKey合并相同的key的值 rdd1.combineByKey(x => x, (a: Int, b: Int) => a + b, (m: Int, n: Int) => m + n)
partitionBy(partitioner)对RDD进行分区 partitioner是分区器
Action类算子
reduce通过func函数聚集RDD中的所有元素,这个功能必须是课交换且可并联的
collect()collect:将Task的计算结果拉回Driver端,在驱动程序中,以数组的形式返回数据集的所有元素
count()返回RDD的元素个数
first()返回RDD的第一个元素(类似于take(1))
take(n)返回一个由数据集的前n个元素组成的数组
saveAsTextFile(path)将数据集的元素以textfile的形式保存到HDFS文件系统或者其他支持的文件系统,对于每个元素,Spark将会调用toString方法,将它装换为文件中的文本
countByKey()针对(K,V)类型的RDD,返回一个(K,Int)的map,表示每一个key对应的元素个数。
foreach(func)在数据集的每一个元素上,运行函数func进行更新。不会回收所有task的计算结果,原理:将用户传入的函数推送到各个节点上去执行查看结果的方式:1.web ui 2.去Worker的工作目录查看
lookup
foreachPartition
控制类算子
cacheRDD缓存,可以避免重复计算从而减少时间,区别:cache内部调用了persist算子,cache默认就一个缓存级别MEMORY-ONLY ,而persist则可以选择缓存级别
persist
注意点: 控制类算子后不能立即紧跟action算子 缓存单元是partition 懒执行,需要action算子出发执行 如果你的Application中只有一个job,没有必要使用控制算子

5、RDD的宽依赖和窄依赖

由于RDD是粗粒度的操作数据集,每个Transformation操作都会生成一个新的RDD,所以RDD之间就会形成类似流水线的前后依赖关系;RDD和它依赖的父RDD(s)的关系有两种不同的类型,即窄依赖(narrow dependency)和宽依赖(wide dependency)。如图所示显示了RDD之间的依赖关系。
在这里插入图片描述
从图中可知:
窄依赖:是指每个父RDD的一个Partition最多被子RDD的一个Partition所使用,例如map、filter、union等操作都会产生窄依赖;(独生子女)
宽依赖:是指一个父RDD的Partition会被多个子RDD的Partition所使用,例如groupByKey、reduceByKey、sortByKey等操作都会产生宽依赖;(超生)

通过RDDs之间的这种依赖关系,一个任务流可以描述为DAG(有向无环图),如下图所示,在实际执行过程中宽依赖对应于Shuffle(图中的reduceByKey和join),窄依赖中的所有转换操作可以通过类似于管道的方式一气呵成执行(图中map和union可以一起执行)。
在这里插入图片描述

总结

如果父RDD的一个Partition被子RDD的一个Partition所使用就是窄依赖,否则的话就是宽依赖。因为是确定的partition数量的依赖关系,所以RDD之间的依赖关系就是窄依赖;由此我们可以得出一个推论:即窄依赖不仅包含一对一的窄依赖,还包含一对固定个数的窄依赖。
一对固定个数的窄依赖的理解:即子RDD的partition对父RDD依赖的Partition的数量不会随着RDD数据规模的改变而改变;换句话说,无论是有100T的数据量还是1P的数据量,在窄依赖中,子RDD所依赖的父RDD的partition的个数是确定的,而宽依赖是shuffle级别的,数据量越大,那么子RDD所依赖的父RDD的个数就越多,从而子RDD所依赖的父RDD的partition的个数也会变得越来越多。

Spark 学习之路三——Spark 的核心之 RDD 进阶 Spark 学习之路三——Spark 的核心之 RDD 进阶 文章目录一、Spark 优化1.1 常用参数说明1.2 Spark 常用编程建议二、Spark 中的两种依赖关系2.1 宽依赖2.2 窄依赖2.3 `DAG`2.4 **任务的划分(重点)**2.5 RDD的缓存与检查点2.5.1 RDD 缓存2.5.2 RDD 检查点2.6 累加器和广播变量2.6.1 累加器2.6.2 广播变量三、Spark 的原理3.1 Spark 的运行流程3.2 Spark 的运行涉及概念3.2.1 `Applicati 阅读详情

相关推荐

Spark学习之路 (三)Spark之RDD

《2021年最新版大数据面试题全面开启更新》 欢迎关注github《大数据成神之路》 目录 一、RDD的概述 1.1 什么是RDD? 1.2 RDD的属性 1.3 WordCount粗图解RDD 二、RDD的创建方式 2.1 通过读取文件生成的 2.2 通过并行化的方式创建RDD 2.3 其他方式 三、RDD编程API 3.1 Transformation 3.2 Action 3.3 Spark WordCount代码编写 3.4 WordCount执行过程图 四、RDD的宽依赖和窄依赖 4.1 R

微信搜:import_bigdata,大数据领域硬核原创作者 831

PySpark基础入门(2):RDD及其常用算子

PySpark基础入门第二篇,主要介绍了RDD的基础内容以及常用算子,包括transformation算子,action算子以及一些分区操作算子

WHY的博客 1830

C#上位机实战:借助NetToPLCSim与西门子S7-1200仿真通信全攻略

本文详细介绍了如何使用C#开发上位机程序,通过NetToPLCSim与西门子S7-1200进行仿真通信的全过程。从环境准备、PLC仿真环境搭建、网络配置到C#代码实现,提供了完整的实战指南和常见问题解决方案,帮助开发者快速掌握工业自动化通信技术。

weixin_30596343的博客 440

Spark核心RDD详解(设计与运行原理,分区,创建,转换,行动与持久化)

弹性分布式数据集, 是分布式内存的一个抽象概念,RDD提供了一种高度受限的共享内存模型,即RDD是只读的记录分区的集合,只能通过在其他RDD执行确定的转换操作(如map、join和group by)而创建,然而这些限制使得实现容错的开销很低。对开发者而言,RDD可以看作是Spark的一个对象,它本身运行于内存中,如读文件是一个RDD,对文件计算是一个RDD,结果集也是一个RDD ,不同的分片、 数据之间的依赖 、key-value类型的map数据都可以看做RDD。

个人学习笔记库,一篇一篇记录成长的足迹 4101

海康工业相机使用:常见问题及解决方法

工业相机在使用过程中,经常会因为操作不当、使用环境不当等原因出现一些问题,本篇教程,主要针对海康工业相机常见问题及其定位方法做以简单介绍,希望可以帮助大家。 注:该教程对其他品牌工业相机“常见问题”排查,也具备一定的指导意义。 当出现无法通过客户端发现设备或者无法预览图像等问题,先确认当前的运行环境是否满足以下要求: 确认装有相机驱动软件的电脑网卡为千兆网卡(Gige接口相机); 确认网卡是否已开启巨型帧; 确认电脑与网口相机之间的网络链路为千兆; 确认装有相机驱动软件的USB接口为3...

Cche的博客 3万+

BGE(BAAI General Embedding)模型详解

BGE(BAAI General Embedding)是北京智源人工智能研究院(BAAI)推出的通用文本嵌入模型系列,旨在为各种自然语言处理任务提供高质量的向量表示。

ttyy1112的专栏 7556

如何将dataframe转换为rdd类型

将dataframe类型的数据存储到本地

wtt561111的专栏 9131

关于STM32编译报错:Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_md.o).

今天新建工程发现出现一个错误 —— …\Output\CG.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_md.o). 但我觉得我的操作没有任何问题,而且配置和上一个文件比较是一模一样的。 于是我开始百度查询,然后发现了下面几个博客—— @weixin_44133391——STM32 编译错误 @dorlolok——iel5 编译报错 error: L6235E: More than one

纯粹,学术,热爱。 9403

什么是RDD ?

突然看到以前的总结,好怀念,这里就贴出来打击看一下吧 Spark知识总结 RDD 什么是RDD ? (Resilient Distributed Datasets)弹性分布式数据集 弹性 RDD可以在存储在内存和磁盘之间,并且自动或者手动切换 RDD具有良好的容错性(即RDD可以通过血统转化为其他RDD) Task如果失败,会进行特定次数的重试(default 4) St

阿生 3985

20240128 C#与SCPI协议实战:轻量级仪器控制库ScpiNet应用指南

本文详细介绍了轻量级C#库ScpiNet在仪器控制中的应用。相较于传统的NI-VISA,ScpiNet无需安装庞大运行时,通过纯C#实现直接与USB或以太网设备通信,支持跨厂商SCPI仪器。文章提供了从快速连接到实战封装、错误处理的完整指南,帮助开发者构建简洁高效的自动化测试系统。

h9j8k7l6m5n的博客 547

七天征服AutoSAR/SomeIP_01速成配置并代码生成

本文为AutoSAR中SomeIP配置开发的实操指南摘要,重点介绍通过通信矩阵快速构建SomeIP工程的方法。核心内容包括:1)基于Excel通信矩阵生成系统描述文件(arxml);2)在AutoSAR工具中导入文件自动生成协议栈配置,涵盖ETHIF、SoAd等模块;3)关键报错处理(COM/PDUR/SOAD/SD模块的配置修正);4)SomeIPXF的数据编解码配置;5)SWC组件与RTE任务映射。教程强调"先完成再完美"的实践原则,指导开发者快速生成基础代码框架,为后续协议调试奠定

大叔带刺的博客 303

spark输出rdd数据_Spark学习之路 (三)Spark之RDD

一、RDD的概述1.1 什么是RDD?RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度。1.2 RDD...

weixin_39648432的博客 626

【论文翻译】YOLO26: KEY ARCHITECTURAL ENHANCEMENTS AND PERFORMANCE BENCHMARKING FOR REAL-TIME OBJECT DETEC

本研究对Ultralytics YOLO26进行了全面分析,重点阐述了其在实时边缘目标检测领域的关键架构改进与性能基准测试结果。YOLO26于2025年9月发布,是YOLO系列中最新、最先进的模型,专为在边缘设备和低功耗设备上实现高效能、高精度和部署就绪性而设计。论文依次详细介绍了YOLO26的架构创新,包括移除分布焦点损失(DFL)、采用端到端无非极大值抑制(NMS)推理、集成渐进式损失(ProgLoss)和小目标感知标签分配(STAL),以及引入MuSGD优化器以实现稳定收敛。

Limiiiing的博客 1682

一起学习Spark(三)Spark RDD编程

一般来说,每个Spark应用程序都有一个Driver程序,Driver运行用户编写的main函数,并在集群上执行各种并行操作。Spark提供的一个主要抽象概念就是RDD(resilient distributed dataset),RDD是可以并行计算的跨集群节点分区的元素结合,RDD可以通过hdfs(也可以是其他hadoop支持的文件系统)或者现有的Scala集合转换得到,Spark还允许我们将...

加油 946

从零开始讲DDR(8)——AXI 接口MIG 使用(1)

我们简单拆解了MIG AXI接口中测试文件的整体框架,首先在sim_tb_top.sv文件中例化了DDR模型和example_top。在example_top中,又例化了MIG IP和一个流量产生器ddr4_v2_2_8_axi_tg_top。在ddr4_v2_2_8_axi_tg_top中的主要功能是分别例化了boot_mode_gen,prbs_mode_gen,custom_mode_gen和axi_opcode_gen。

apple_53311083的博客 1587

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Spark学习三:RDD介绍及编程

Overview(总览) Spark提供的主要抽象就是弹性分布式数据集 - - RDD(resilient distributed dataset),它是跨集群节点的分区元素的集合(RDD是有分区的),是可以并行操作的。 RDD的创建有两种方式:(一)从Hadoop文件系统(或任何其他Hadoop支持的文件系统)的文件读取创建 (二)从driver program的已存在的scala集合中创建并转...

patrick_big_data的博客 1306

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

spark学习三 RDD详解

Resilient Distributed Dataset (RDD)弹性分布数据集 ◆ RDD是Spark的最基本抽象,是对分布式内存的抽象使用,实现了以操作本地集合的方式来操作分布式数据集的抽象实现。RDD是Spark最核心的东西,它表示已被分区,不可变的并能够被并行操作的数据集合,不同的数据集格式对应不同的RDD实现。RDD必须是可序列化的。RDD可以cache到内存中,每次对RDD数

西红柿炒土豆 1681

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Spark学习笔记:三、RDD原理

一、RDD原理: 一个RDD就是一个分布式对象集合,本质上是一个只读的分区记录集合,每个RDD可以分成多个分区,每个分区就是一个数据集片段,并且一个RDD的不同分区可以被保存到集群中不同的节点上,从而可以在集群中的不同节点上进行并行计算。 RDD提供了一组丰富的操作以支持常见的数据运算,分为“行动”(Action)和“转换”(Transformation)两种类型,前者用于执行计算并指定输出的...

松坡的机器学习笔记 1197

Spark学习笔记三(RDD)

An RDD in Spark is simply a distributed collection of objects. Each RDD is split into multiple partitions, which may be computed on different nodes of the cluster.RDD的特点是在内存中运行,因此速度很快。且RDD数据由Spark自动分散到

我的学习成长日记 824

学习spark:三、RDD的action操作

Apache Spark是一个快速、通用的集群计算系统。它提供Java中,Scala,Python和R的api,和一个最优化的引擎。它还支持一组丰富的高级工具,包括Spark SQL和SQL结构化数据处理、MLlib机器学习,GraphX图处理,流处理。

王谦的专栏 955

Spark学习之路(三):剖析RDD的概念及用三种方式创建RDD

内容简介一、RDD的基本概念二、创建RDD1.使用三种方式创建RDD2.使用Java演示三种方式创建RDD3.使用Scala演示三种方式创建RDD三、总结 一、RDD的基本概念 RDD ,弹性分布式数据集, 是分布式内存的一个抽象概念,是Spark中最为基本也最为重要的一个抽象,如果说Java的哲学是“万物皆对象”的话,可以笼统地认为Spark的哲学是“万物皆RDD”,这句话的意思是在Spark...

萧邦主的城邦 1008

Spark 学习(三) RDD基本介绍

一,RDD概述   1.1什么是RDD   1.2 RDD的属性 二,创建RDD 三,RDD编程API   3.1 Transformation   3.2 Action   3.3 WordCount   3.4练习 四,RDD的依赖关系   4.1窄依赖   4.2宽依赖   4.3 Lineage 正文 一,RDD概述   1.1什么是RD...

weixin_30381317的博客 234
上一篇: Spark学习(二) 之集群搭建(standalone、HA-standalone、 spark on yarn)
下一篇: Spark学习(四)之Spark运行流程
thyyyyyyy
博客等级 码龄8年 16粉丝 15原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值