【Spark】RDD概念、特点、属性、常见操作、缓存级别

1.RDD(Resilient Distributed Dataset)基本概念

RDD是 Spark core的底层核心,表示一个不可变的、可分区、可并行计算的弹性分布式数据集

2.RDD 的特点:

  1. 不可变性

    • 一旦创建,RDD 的数据不可改变。所有对 RDD 的操作(如 map, filter, reduce 等)都会生成一个新的 RDD,而不会修改原始 RDD。
    • 这种不可变性使得 RDD 在分布式计算环境下非常稳定,避免了并发冲突。
  2. 分区

    • RDD可以多个分区。分区是 Spark 作业并行计算的基本单位,每个分区可以独立处理。
    • 这种分区结构使得 Spark 可以有效地进行数据并行处理,提高计算效率。
  3. 分布式存储

    • RDD 可以存储在分布式文件系统中(如 HDFS、S3、HBase 等),并可以在多个节点上进行操作。数据的分布和存储位置是由 Spark 集群管理的。
  4. 弹性

    • 容错的弹性:数据丢失可以自动恢复
    • 存储的弹性:内存与磁盘的自动切换
    • 计算的弹性:计算出错重试机制
    • 分片的弹性:可根据需要重新分片
  5. 懒加载

    • RDD 的转换操作是惰性执行的。即当用户对 RDD 执行操作时,这些操作并不会立刻执行,Spark 会首先构建一个 DAG(有向无环图),描述所有的转换步骤。实际的计算只有在执行 Action 操作时才会启动。

3.RDD 的属性:

  1. 【Partitions】分区列表

    • RDD 是由多个分区组成的,每个分区都在一个计算节点上执行。分区数可以通过创建 RDD 时指定,或者根据数据源的大小和集群的资源来自动确定。
  2. 【Partitioner】RDD分片函数

    • 基于哈希的HashPartitioner,(key.hashcode % 分区数= 分区号)。它是默认值
    • 基于范围的RangePartitioner。
    • 只有对于key-value的RDD,并且产生shuffle,才会有Partitioner;
    • 非key-value的RDD的Parititioner的值是None。
  3. 【compute】每个分区都有一个计算函数

    • RDD 包含血统信息,记录了该 RDD 如何通过一系列转换操作从原始数据中构建出来。血统信息用于恢复丢失的数据(例如,某个节点失败后,Spark
      可以利用血统信息重新计算该节点的数据)。
    • 血统信息是 RDD 的关键属性之一,它帮助 Spark 实现容错性。
  4. 【Dependencies】依赖关系

    • 每个 RDD 都有一个或多个依赖关系,表示它是如何由其它 RDD 转换得到的。RDD 之间的依赖关系有两种:
      • 窄依赖(Narrow Dependency):每个父 RDD 的分区对应一个子 RDD 的分区。例如,mapfilterunion 等操作。
      • 宽依赖(Wide Dependency):父 RDD 的一个分区可能会被多个子 RDD 的分区使用。例如,groupBy()reduceByKey() 等操作。
  5. 【优先位置】

    • 移动数据不如移动计算,Spark在任务调度时,会尽可能将计算任务分配到所要处理数据块的存储位置

4.RDD 的常见操作:

1. 转换操作(Transformation)
  • RDD 的转换操作是惰性执行的,返回一个新的 RDD,原始 RDD 不会改变。
  • 常见的转换操作包括:
    • map(): 对 RDD 中的每个元素应用一个函数,生成一个新的 RDD。
    • filter(): 筛选符合条件的元素,生成一个新的 RDD。
    • flatMap(): 类似于 map(),但每个元素可以映射为多个输出元素。
    • union(): 合并两个 RDD。
    • groupBy(): 按照给定的条件将 RDD 中的数据分组。
2. 行动操作(Action)
  • 行动操作触发实际的计算并返回结果。行动操作会执行并返回计算结果。
  • 常见的行动操作包括:
    • collect(): 将 RDD 中的所有元素收集到本地。
    • count(): 计算 RDD 中元素的数量。
    • reduce(): 对 RDD 中的元素进行聚合操作。
    • saveAsTextFile(): 将 RDD 中的内容保存到外部文件系统(如 HDFS)。

5.RDD 的缓存级别:

  1. MEMORY_ONLY

    • 说明:将RDD数据仅缓存到内存中,如果内存不足,Spark会丢弃那些无法缓存的数据。
    • 特点:速度最快,但会受到内存限制。如果内存不够,计算会重新执行。
    • 适用场景:内存充足,且不需要持久化数据。
  2. MEMORY_AND_DISK

    • 说明:如果内存不足,RDD数据会溢写到磁盘上。
    • 特点:比MEMORY_ONLY更可靠,因为当内存不够时,数据会自动保存在磁盘上,但磁盘的读取速度会较慢。
    • 适用场景:内存不够用时需要保证数据可用,磁盘读取速度不会成为瓶颈。
  3. MEMORY_ONLY_SER(序列化存储):

    • 说明:将RDD数据以序列化格式缓存到内存中,序列化后通常可以节省内存空间。
    • 特点:相比MEMORY_ONLY,节省内存,但存储和读取速度较慢。
    • 适用场景:内存不足且需要节省内存空间时,适用于存储简单的数据类型。
  4. MEMORY_AND_DISK_SER(序列化存储):

    • 说明:类似于MEMORY_AND_DISK,但数据会以序列化的形式缓存到内存和磁盘。
    • 特点:节省内存,但会增加序列化和反序列化的开销。
    • 适用场景:适用于内存有限且需要减少内存使用的情况。
  5. DISK_ONLY

    • 说明:将RDD数据仅存储到磁盘上,不使用内存。
    • 特点:性能较慢,最好在内存不足时可以使用。
    • 适用场景:数据非常大,无法完全存储在内存中时,可以使用磁盘缓存。
  6. OFF_HEAP

    • 说明:将RDD数据存储到外部内存中。
    • 特点:支持堆外内存缓存,避免了JVM堆内内存的管理开销。
    • 适用场景:在需要高效管理大规模数据集时,且不希望受到JVM堆内存限制的情况。
例如:
val rdd = sc.parallelize(Seq(1, 2, 3, 4, 5))
rdd.cache()  // 默认使用 MEMORY_ONLY 缓存级别,等价于persist(StorageLevel.MEMORY_ONLY)
rdd.persist(StorageLevel.MEMORY_AND_DISK) // 指定缓存级别

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

无人设备遥控器之动态调频功能篇

一、动态调频功能概述 动态调频功能是指无人机遥控器能够根据当前环境或用户需求,自动调整无线电信号的频率,以优化通信质量和控制性能。这一功能对于确保无人机在复杂环境中的稳定飞行和精确控制至关重要。 二、动态调频的工作原理 频率选择与调整&am…

Android -- [SelfView] 自定义多行歌词滚动显示器

Android – [SelfView] 自定义多行歌词滚动显示器 流畅、丝滑的滚动歌词控件* 1. 背景透明;* 2. 外部可控制进度变化;* 3. 支持屏幕拖动调节进度(回调给外部);效果 歌词文件(.lrc) 一. 使用…

【知识点】图与图论入门

何为图论 见名知意,图论 (Graph Theory) 就是研究 图 (Graph) 的数学理论和方法。图是一种抽象的数据结构,由 节点 (Node) 和 连接这些节点的 边 (Edge) 组成。图论在计算机科学、网络分析、物流、社会网络分析等领域有广泛的应用。 如下,这…

前海紫荆花广场附近路面的临时停车点

前海紫荆花广场附近路面的临时停车点大概20个的样子 具体在紫荆花广场的侧边,每天都有车停。建议临时应急停。因为虽然没有交警贴罚单,但是还是会被贴违停。 不少车贴如下禁停标志。其实附近桂湾公园就可以免费停车,可能是公园停满了&#xf…

【5G】5G Physical Layer物理层(一)

5G多址接入和物理层与长期演进(LTE)存在一些差异。在下行方向,5G与LTE相似,依旧采用正交频分多址(OFDMA)。而在上行方向,5G采用了OFDMA和单载波频分多址(SC-FDMA)&#x…

rk3576 , android14 , 编译, 卡死,android.bp , ninja

问题:我在 编译 android14 的时候, 卡死再 analysing android.bp 这里 ,卡了 3,4 个小时。肯定是有问题的。 如图&…

element-plus的el-tree的双向绑定

el-tree改造了下 可选可取消 有默认值 不包含父级id 默认展开 点击节点也可触发选择 节点内容自定义 <template>{{ childKeys }}<!--default-checked-keys:默认展开值&#xff08;正常来说需要包含父级id的 但是我们后端不要后端id &#xff09;show-checkbox&#x…

如何通过自学成长为一名后端开发工程师?

大家好&#xff0c;我是袁庭新。最近&#xff0c;有星友向我提出了一个很好的问题&#xff1a;如何通过自学成为一名后端开发工程师&#xff1f; 为了解答这个疑问&#xff0c;我特意制作了一个视频来详细分享我的看法和建议。 戳链接&#xff1a;如何通过自学成长为一名后端开…

C++:类和对象(2)

1. 类的默认成员函数&#xff1a; 类的默认成员函数就是用户没有显示实现&#xff0c;编译器会自动生成的成员函数称为默认成员函数。一个类&#xff0c;我们不写的情况下编译器会默认生成6个默认成员函数&#xff08;构造函数&#xff0c;析构函数&#xff0c;拷贝构造函数&a…

爬虫运行后数据如何存储?

爬虫运行后获取的数据可以存储在多种不同的存储系统中&#xff0c;具体选择取决于数据的规模、查询需求以及应用场景。以下是一些常见的数据存储方法&#xff1a; 1. 文件系统 对于小型项目或临时数据存储&#xff0c;可以直接将数据保存到本地文件中。常见的文件格式包括&…

[生物信息]单细胞数据分析入门学习笔记1

推荐课程&#xff1a;Analysis of single cell RNA-seq data (singlecellcourse.org) 1 关于《Analysis of single cell RNA-seq data》课程 如今&#xff0c;通过高通量测序&#xff08;scRNA-seq&#xff09;可以从单细胞获取全基因组转录组数据。scRNA-seq 的主要优势在于…

ArcMap 分析栅格欧式分配、构建趋势面、插值模型精度等功能操作

ArcMap 分析栅格欧式分配、构建趋势面、插值模型精度等功能操作今天进行 一、栅格欧式分配 1、对点要素进行空间分配 配置环境变量 点击确定后展示 2、对线要素进行空间分配 环境变量依然选择 road 相同&#xff0c;点击确定后展示 3、对面要素进行空间分配 环境配置与 road …

推荐在线Sql运行

SQL Fiddle 1、网址&#xff1a;SQL Fiddle - Online SQL Compiler for learning & practiceDiscover our free online SQL editor enhanced with AI to chat, explain, and generate code. Support SQL Server, MySQL, MariaDB, PostgreSQL, and SQLite.http://www.sqlfi…

MySQL 8.0 新特性汇总

文章目录 前言1. 运维管理 1.1 可持久化变量1.2 管理员端口1.3 资源组1.4 数据库粒度只读1.5 show processlist 实现方式1.6 加速索引创建速度1.7 控制连接的内存使用量1.8 克隆插件1.9 mysqldump 新增参数1.10 慢日志增强1.11 快速加列1.12 InnoDB 隐藏主键1.13 Redo 配置1.14…

使用android studio写一个Android的远程通信软件(APP),有通讯的发送和接收消息界面

以下是使用 Android Studio 基于 Java 语言编写一个简单的 Android APP 实现远程通信&#xff08;这里以 TCP 通信为例&#xff09;的代码示例&#xff0c;包含基本的通信界面以及发送和接收消息功能。 1. 创建项目 打开 Android Studio&#xff0c;新建一个 Empty Activity …

记录blender学习过程中遇到的问题

物体发射的方向不对 被发射物体&#xff08;例如一棵树&#xff09;n键看旋转归0 切换正视图 将被发射物体的局部坐标的Z轴 指向 全局方向的X轴时 并且把粒子系统设置的物体旋转勾选上 方向就对了 做倒角发现有问题 检查缩放应用、面朝向、有没有重合点&#xff08;融合点&am…

【RBF SBN READ】hadoop社区基于RBF的SBN READ请求流转

读写分离功能的背景及架构 当前联邦生产集群的各个子集群只有Active NameNode在工作,当读写任务变得繁忙的时候,只有一个Active负责处理的话,此时集群的响应和处理能力业务侧感知会明显下降,为此,我们将引入Observer架构,实现读写功能的分离,使得Active只负责写请求,而…

01-Chromedriver下载与配置(mac)

下载地址&#xff1a; 这里我用的最后一个&#xff0c;根据自己chrome浏览器选择相应的版本号即可 ChromeDriver官网下载地址&#xff1a;https://sites.google.com/chromium.org/driver/downloads ChromeDriver官网最新版下载地址&#xff1a;https://googlechromelabs.git…

MySQL——buffer poll

为什么要有buffer poll&#xff1f; 如果没有buffer poll&#xff0c;每次读取数据的时候都是从磁盘上读的&#xff0c;这样效率是很差的的。 所以有了提高效率的方式&#xff0c;就加上了一个缓存——buffer poll 所以&#xff0c;当我们读取数据的时候就有以下的方式 当读…

重磅升级:OpenAI o1模型上手实测,从芯片架构分析到象棋残局判断的全能表现

引言 昨日&#xff0c;在圣诞节系列发布会的第一天&#xff0c;OpenAI终于给我们带来了令人振奋的更新&#xff0c;这些更新有望塑造AI互动的未来。备受期待的OpenAI o1正式版的推出&#xff0c;标志着ChatGPT体验的重大进化&#xff0c;宣告了AI驱动应用新时代的开始。o1现已可…