Spark RDD 机制理解吗?RDD 的五大属性,RDD、DataFrame、DataSet 三者的关系,RDD 和 DataFrame 的区别,Spark 有哪些分区器【重要】

简介: Spark RDD 机制理解吗?RDD 的五大属性,RDD、DataFrame、DataSet 三者的关系,RDD 和 DataFrame 的区别,Spark 有哪些分区器【重要】

一、Spark RDD 机制:【重要】

RDD(Resilient Distributed DataSet)叫做弹性分布式数据集,是 Spark 中最基本的数据处理模型,也是 Spark 进行高并发和高吞吐的数据处理三大数据结构之一,所有的算子都是基于 RDD 来执行的,不同的场景有不同的 RDD 实现类,他们互相之间可以进行转换,来实现特定的需求。RDD 代表一个弹性、可分区、不可变、里面的元素可并行计算的集合。

➢ 弹性:

  • 存储的弹性:内存与磁盘可以自动切换;RDD 的数据默认存放在内存中,当内存资源不足时,spark 会自动将 RDD 数据写入磁盘。
  • 容错的弹性:数据丢失可以自动恢复;RDD 可以通过自己的数据来源重新计算该 partition
  • 计算的弹性:计算出错的话,可以进行重试机制;
  • 分片的弹性:可根据需要重新进行分片

分布式:数据存储在大数据集群不同节点上;

数据集:RDD 封装了计算逻辑,并不会保存数据;

不可变:RDD 封装了计算逻辑,是不可以改变的,想要改变,只能产生新的 RDD,在新的 RDD 里面封装计算逻辑;

可分区、并行计算:RDD 在逻辑上是一个 HDFS 文件,在抽象上是一种元素集合。它是可以被分区的,每个分区分布在集群中的不同结点上,从而让 RDD 中的数据可以被并行操作。

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

RDD : 弹性分布式数据集

累加器:分布式共享只写变量

广播变量:分布式共享只读变量

二、RDD 的五大属性

* Internally, each RDD is characterized by five main properties:
 *
 *  - A list of partitions
 *  - A function for computing each split
 *  - A list of dependencies on other RDDs
 *  - Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
 *  - Optionally, a list of preferred locations to compute each split on (e.g. block locations for
 *    an HDFS file)

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

protected def getPartitions: Array[Partition]

2. 分区计算函数:Spark 在计算时,会使用分区函数对每一个分区进行计算。

def compute(split: Partition, context: TaskContext): Iterator[T]

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

protected def getDependencies: Seq[Dependency[_]] = deps

4. 分区器(可选):当数据为 KV 类型数据时,可以通过设定分区器自定义数据的分区。

@transient val partitioner: Option[Partitioner] = None

5. 首选位置(可选):计算数据时,可以根据计算结点的状态选择不同的结点位置进行计算。

protected def getPreferredLocations(split: Partition): Seq[String] = Nil

 

三、RDD、DataFrame、DataSet 三者的关系

早期 SparkSQL 为了简化 RDD 的开发,提高开发效率,对 SparkCore 进行了一些封装,提供了 2 个编程抽象,分别是 DataFrame 和 DataSet。

这三个数据结构分别计算后,都可以给出相同的结果,不同的是它们的执行效率和执行方式。

三者的共性:

  • RDD、DataFrame、DataSet 都是 Spark 平台下的弹性分布式数据集,为处理大型数据提供便利。
  • 三者都有惰性机制,在进行创建、转换等操作时不会立即执行,只有触发行动算子时才会执行。
  • 在对 DataFrame 和 DataSet 进行操作时都需要导入隐式转换的包 “import spark.implicits”
  • 三者都会根据 Spark 的内存情况自动缓存运算,所以即使数据量很大,也不用担心内存溢出。
  • DataFrame 和 DataSet 均可使用模式匹配获取各个字段的值和类型。
  • 三者都有 partition 的概念、以及有许多共同的函数,如 filter、排序等。

三者之间的互相转换:

四、RDD 和 DataFrame 的区别

RDD 和 DataFrame 均是 Spark 平台对数据的一种抽象,DataFrame 是一种以 RDD 为基础的分布式数据集,类似于传统数据库中的二维表格。

DataFrame 与 RDD 的主要区别在于,DataFrame 关心数据的结构,RDD 不关心数据的结构,只关心数据是什么。比如给个数据 1,RDD 不关心 1 代表什么意思,只关心 1、2、3 就够了,而 DataFrame 更关心 1 所代表的含义,比如它是个年龄 age,那么在 SQL 查询的时候就会方便很多,它可以利用已知的结构信息来提升执行的效率、减少数据的读取,所以 DataFrame 可以简化 RDD 的开发,提高开发效率。

 

五、Spark 有哪些分区器?

spark 默认是提供了两种分区器,HashPartitioner 和 RangePartitioner

但是有的时候不能满足我们实际的需求,这个时候我们可以自定义一个分区器 。

自定义分区器流程:

(1)继承 Partitioner(2)重写方法(numPartitions、getPartition)

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
1月前
|
分布式计算 并行计算 大数据
Spark学习---day02、Spark核心编程(RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(一)
Spark学习---day02、Spark核心编程 RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(一)
75 1
|
1月前
|
分布式计算 Java Scala
Spark学习---day03、Spark核心编程(RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(二)
Spark学习---day03、Spark核心编程(RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(二)
41 1
|
9天前
|
分布式计算 大数据 数据处理
【Flink】Flink跟Spark Streaming的区别?
【4月更文挑战第17天】【Flink】Flink跟Spark Streaming的区别?
|
1月前
|
分布式计算 Spark
Spark【Spark学习大纲】简介+生态+RDD+安装+使用(xmind分享)
【2月更文挑战第14天】Spark【Spark学习大纲】简介+生态+RDD+安装+使用(xmind分享)
32 1
|
1月前
|
分布式计算 Hadoop Java
Spark【基础知识 03】【RDD常用算子详解】(图片来源于网络)
【2月更文挑战第14天】Spark【基础知识 03】【RDD常用算子详解】(图片来源于网络)
57 1
|
1月前
|
存储 缓存 分布式计算
Spark学习--day04、RDD依赖关系、RDD持久化、RDD分区器、RDD文件读取与保存
Spark学习--day04、RDD依赖关系、RDD持久化、RDD分区器、RDD文件读取与保存
39 1
|
存储 分布式计算 Spark
聊聊Spark的分区
通过上篇文章【Spark RDD详解】,大家应该了解到Spark会通过DAG将一个Spark job中用到的所有RDD划分为不同的stage,每个stage内部都会有很多子任务处理数据,而每个stage的任务数是决定性能优劣的关键指标。
聊聊Spark的分区
|
3月前
|
机器学习/深度学习 SQL 分布式计算
Apache Spark 的基本概念和在大数据分析中的应用
介绍 Apache Spark 的基本概念和在大数据分析中的应用
161 0
|
15天前
|
分布式计算 Hadoop 大数据
大数据技术与Python:结合Spark和Hadoop进行分布式计算
【4月更文挑战第12天】本文介绍了大数据技术及其4V特性,阐述了Hadoop和Spark在大数据处理中的作用。Hadoop提供分布式文件系统和MapReduce,Spark则为内存计算提供快速处理能力。通过Python结合Spark和Hadoop,可在分布式环境中进行数据处理和分析。文章详细讲解了如何配置Python环境、安装Spark和Hadoop,以及使用Python编写和提交代码到集群进行计算。掌握这些技能有助于应对大数据挑战。
|
3月前
|
机器学习/深度学习 SQL 分布式计算
介绍 Apache Spark 的基本概念和在大数据分析中的应用。
介绍 Apache Spark 的基本概念和在大数据分析中的应用。