Spark---RDD介绍

news/2024/11/23 2:51:22/

文章目录

  • 1.Spark核心编程
  • 2.RDD介绍
      • 2.1.RDD基本原理
      • 2.2 RDD特点
          • 1.弹性
          • 2.分布式 :数据存储在大数据集群的不同节点上
          • 3.数据集 :RDD封装了计算逻辑,并不保存数据
          • 4.数据抽象 :RDD是一个抽象类,具体实现由子类来实现
          • 5. 不可变:RDD封装了计算的逻辑,是不可以随意改变的,如果想要改变,则需要产生新的RDD,在新的RDD里面封装计算逻辑
          • 6. 可分区,并行计算:对读取进来的数据进行分区,之后将不同分区的数据发送给不同的Executor来处理。
      • 2.3 RDD核心属性
          • 2.3.1 分区列表
          • 2.3.2 分区计算函数
          • 2.3.3 RDD 之间的依赖关系
          • 2.3.4 分区器
          • 2.3.5 首选位置
      • 2.3 执行原理
  • 3.RDD基础编程
      • 3.1 RDD创建
          • 1.从集合(内存)中创建 RDD
          • 2.从外部存储(文件)创建 RDD
      • 3.2 RDD 并行度与分区

1.Spark核心编程

Spark为了能够进行高并发和高吞吐的数据处理,封装了三大数据结构,用于处理不同的应用场景。

RDD:弹性分布式数据集
累加器:分布式共享只写变量
广播变量:分布式共享只读变量

2.RDD介绍

RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是 Spark 中最基本的数据处理模型。代码中是一个抽象类,它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合。RDD是一个最小计算单元。

2.1.RDD基本原理

IO原理:将数据读取成为字符

在这里插入图片描述

对WordCount案例进行分解,可以更好的帮助理解RDD。
在这里插入图片描述

RDD数据处理方式类似于IO流,也使用到了装饰者设计模式,它只有在执行了collect方法之后才会执行真正的业务逻辑操作,在之前全部都是对功能的扩展。
在IO中数据会被临时存储在缓冲区中,达到一定的阈值写出,但是在RDD中是不会临时存储数据的。
RDD的基本原理就是通过组合多个RDD来实现对功能的扩展。

注意;具体功能都是由RDD的子类来实现的

2.2 RDD特点

1.弹性

在这里插入图片描述

2.分布式 :数据存储在大数据集群的不同节点上
3.数据集 :RDD封装了计算逻辑,并不保存数据
4.数据抽象 :RDD是一个抽象类,具体实现由子类来实现
5. 不可变:RDD封装了计算的逻辑,是不可以随意改变的,如果想要改变,则需要产生新的RDD,在新的RDD里面封装计算逻辑
6. 可分区,并行计算:对读取进来的数据进行分区,之后将不同分区的数据发送给不同的Executor来处理。

在这里插入图片描述

2.3 RDD核心属性

2.3.1 分区列表

RDD 数据结构中存在分区列表,用于执行任务时并行计算,是实现分布式计算的重要属性。

2.3.2 分区计算函数

Spark 在计算时,是使用分区函数对每一个分区进行计算

2.3.3 RDD 之间的依赖关系

RDD 是计算模型的封装,当需求中需要将多个计算模型进行组合时,就需要将多个 RDD 建立依赖关系

2.3.4 分区器

当数据为 KV 类型数据时,可以通过设定分区器自定义数据的分区

2.3.5 首选位置

计算数据时,可以根据计算节点的状态选择不同的节点位置进行计算,即移动数据不如移动计算。

2.3 执行原理

Spark在数据处理的过程中需要计算资源,如内存、CPU和计算逻辑等。

Spark 框架在执行时,先申请资源,然后将应用程序的数据处理逻辑分解成一个一个的计算任务。然后将任务发到已经分配资源的计算节点上, 按照指定的计算模型进行数据计算。最后得到计算结果。在这里插入图片描述
2.Spark 通过申请资源创建调度节点和计算节点
在这里插入图片描述
3.Spark 框架根据需求将计算逻辑根据分区划分成不同的任务
在这里插入图片描述
4.调度节点将任务根据计算节点状态发送到对应的计算节点进行计算
在这里插入图片描述

3.RDD基础编程

3.1 RDD创建

1.从集合(内存)中创建 RDD
val rdd1 = sparkContext.parallelize(List(1,2,3,4)
)
val rdd2 = sparkContext.makeRDD(List(1,2,3,4)
)

其中makeRDD方法的底层就是实现了paralleize方法

2.从外部存储(文件)创建 RDD
val fileRDD: RDD[String] = sparkContext.textFile("input")

3.2 RDD 并行度与分区

默认情况下,Spark 可以将一个作业切分多个任务后,发送给 Executor 节点并行计算,而能够并行计算的任务数量我们称之为并行度。(cpu核数就是并行度) 这个数量可以在构建 RDD 时指定。

sparkContext.makeRDD(List(1,2,3,4),4)//设置并行度为4
val fileRDD: RDD[String] =sparkContext.textFile("input",2)//设置并行度为2

读取内存数据时,数据可以按照并行度的设定进行数据的分区操作


http://www.ppmy.cn/news/1295271.html

相关文章

推荐弱光图像增强算法比较《Lightening Network for Low-Light Image Enhancement》(附带DLN可执行程序)

文章链接:https://ieeexplore.ieee.org/document/9141197 文章代码:https://github.com/WangLiwen1994/DLN 很经典的一个工作,其实并没有特别好讲的,因为并不是广为流传的工作 唯一值得说的就是比较好更改网络结构以及用于我们自…

Docker Zookeeper 安装 简单教程

现在各种组件大部分都能找到Docker的镜像了,Docker容器化安装很多复杂中间件都变得非常轻松了。 1.拉取镜像 以下命令默认是拉取最新版本 zookeeper:latest docker pull zookeeper 注: 若要拉取指定版本如3.7,则可以执行命令 docker pull zookeeper:…

HTB Bizness

Bizness 2024年1月7日 10:16:41User Nmap Not shown: 997 closed ports PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.4p1 Debian 5+deb11u3 (protocol 2.0) 80/tcp open http nginx 1.18.0 |_http-server-header: nginx/1.18.0 |_http-title:

十一、工具盒类(MyQQ)(Qt5 GUI系列)

目录 ​编辑 一、设计需求 二、实现代码 三、代码解析 四、总结 一、设计需求 抽屉效果是软件界面设计中的一种常用形式,可以以一种动态直观的方式在有限大小的界面上扩展出更多的功能。本例要求实现类似 QQ 抽屉效果。 二、实现代码 #include "dialog.…

STM32 学习(二)GPIO

目录 一、GPIO 简介 1.1 GPIO 基本结构 1.2 GPIO 位结构 1.3 GPIO 工作模式 二、GPIO 输出 三、GPIO 输入 1.1 传感器模块 1.2 开关 一、GPIO 简介 GPIO(General Purpose Input Output)即通用输入输出口。 1.1 GPIO 基本结构 如下图&#xff0…

vue3防抖函数封装与使用,以指令的形式使用

utils/debounce.js /*** 防抖函数* param {*} fn 函数* param {*} delay 暂停时间* returns */ export function debounce(fn, delay 500) {let timer nullreturn function (...args) {// console.log(arguments);// const args Array.from(arguments)if (timer) {clearTim…

【 YOLOv5】目标检测 YOLOv5 开源代码项目调试与讲解实战(4)-自制数据集及训练(使用makesense标注数据集)

如何制作和训练自己的数据集 看yolov5官网创建数据集1.搜索需要的图片2.创建标签标注数据集地址:放入图片后选择目标检测创建文档,每个标签写在单独的一行上传结果此处可以编辑类别把车框选选择类别即可导出数据 3.新建一个目录放数据写yaml文件 4. 测试…

BRC20 技术分析

文章目录 什么是 BRC20 ?brc20 白皮书。重点基于链上数据解析获取交易详情返回值如何将 16 进制转换为 字符串没有节点,如何获取数据?见证隔离如何解析出 BRC20 数据?最后如何快速搭建节点BRC20 Indexer