大白话讲解Spark中的RDD

RDD是Spark的核心数据抽象,表现为不可变、分区的并行数据集合,类似于数据库的视图。RDD的特点包括容错性和执行效率优化。通过操作RDD,Spark可以在计算时避免不必要的重复计算,提高性能。RDD的容错机制使得数据在节点故障时可以从源数据恢复,而分布式特性则允许数据分布在多台机器上,实现并行计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

资料中:

Spark 中最基本的数据抽象是 RDD。

RDD:弹性分布式数据集 (Resilient Distributed DataSet)。

RDD的三个特性:分区,不可变,并行操作。

• RDD 是 Spark 的最基本抽象,是对分布式内存的抽象使用,实现了以操作本地集合的方式
来 操作分布式数据集的抽象实现
• RDD 是 Spark 最核心的东西,它表示已被分区,不可变的并能 够被并行操作的数据集合,
不同的数据集格式对应不同的 RDD 实现
RDD特点:
• RDD 必须是可序列化的
• 只读:状态不可变,不能修改
• 分区:支持元素根据 Key 来分区( Partitioning ) ,保存到多个结点上
• RDD 需要从其他数据集变换而来
• RDD 包含转换与Action操作
• 对于不同的系统RDD不同,如HadoopRDD,JDBCRDD…

一脸懵逼 有没有?

在学习spark中的知识点的时候,发现总是经常把dataframe或者dataset转化成RDD,就很奇怪为什么要做这方面的转化,RDD又是何方神圣呢?
如果你熟悉数据库,那么RDD从表现形式上讲最类似于数据库的视图(View)
去除这个RDD在物理结构上的特色,单从逻辑上的表现来说,他就是一个数据集合
什么是数据集合?

可以理解为Java中的一个list,或者是数据库里的一张表(或者视图)等等。
既然是一张表,我们可以理解Spark对RDD的操作,其实类似于SQL里面对表的一些操作。
在最开始的时候我说RDD最类似数据库的视图,那为什么是视图而不是表呢?

这就要说说RDD里面的这个R(弹性),什么叫弹性呢?

就是一个RDD的数据并不一定是物理上真是存在的,注意是不一定,就像数据库里的视图(view),只有你在query的时候他才会真正计算出这些数据。RDD里的数据也一样,

比如一张全是大写地名的表-- {S: SHANGHAI, BEIJING, ...},可能在RDD里是这样一种形式 {S = S1:{Shanghai, BEIJing, ...}. toUPPERcase }.

前面提到的两个数集合在物理上的内容其实是不一样的,但是你能看到的两个集合是一样的。在Spark里面,类似于toUPPERcase 这样的操作我们叫算子。好了,这样你就理解了这个R,也是RDD最难懂的一个地方。再说说中间的那个D(分布式),这个很好理解,就是一个数据集分别放在几个机器上,而RDD只要存储这些数据的元信息(如那一片在哪个机器上)即可。


不过这样解释似乎缺了些什么,就是为什么RDD要如此麻烦呢?

这里我说最明显的两个亮点。

1,容错

比如你有一个表,里面是一个公司12个月的平均销售额,存储在12个机器上,突然存储8月数据的机器坏了,那么你通常选择的做法是把整一年的销售资料拿出来,再以月份分组,再把8月的算出来,存在一个好的机器里。而RDD存储8月的数据可能就是(select avg(sales)from t where month = 8) ,在你需要的时侯,如果发现8月数据不在了,可以自动从原数据里把这个数据恢复出来。(这个例子并不是特别真实,只不过很简单的帮你理解容错这个特性)。

2,是执行效率优化。假设有这么一个情况,有一个数据表,先把里面的数据都+1,再-1,再+1,再-1. 这样显然数据应该都是不变的。如果你每次都把这个数据表都算出来,这样就要执行4次O(n)效率的查找。然而用RDD的思路,{S'} = {S}+1-1+1-1 => {S'} = {s} + 0, 这样就大大提高了效率。(同样这个例子很弱智,但是能帮助你理解RDD为什么要用数据+算子的形式去描述一个数据集).

若要深入了解还需要结合Spark的运行机制,Hadoop的HDFS,Scala的语法共同来理解RDD这样东西

 

总结:RDD就是一个虚拟的、分区的、可并行操作的具有容错率高,执行优化效率高的数据集。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值