RDD(Resilient Distributed Datasets 弹性分布式数据集)

15 篇文章 2 订阅
8 篇文章 0 订阅

RDD是spark计算框架的核心,spark相比于hadoop的优越性在RDD中体现得淋漓尽致。对于RDD的介绍,最好的资料就是那篇专门介绍RDD的论文了,已经有中文翻译。使用scala编写spark应用,给人的感觉就像是在使用scala编写普通的scala程序,感觉spark编程和scala编程完成融合在一起了– RDD就是scala的一个类。
这里写图片描述
RDD是一个只读不可修改的数据集,在scala spark编程中可以认为这是一个不可修改的对象,这个对象包含用户需要的数据集。RDD对象定义了用户常用的方法,比如gourpby方法,map方法。这些方法也叫spark算子,通过使用这些算子,编程人员可以灵活地编写spark程序(不像hadoop那样基本上只有map和reduce方法)。同一个RDD中的数据可能存储在不同的节点上面,所以,RDD的一些操作会消耗比较长的时间,比如groupby操作,可能会引发洗牌shuffle。

RDD算子可以分为两类,一类是转换(transformation),另一类是行动(action)。无论是transformation类型的算子还是action类型的算子,它们都是RDD对象的方法,也就是spark算子。区分它们的方法就是,如果某一算子的返回值是一个RDD,那么该算子就属于transformation,否则就属于action。transformation类型的算子不会触发RDD程序的执行,action类型的算子才可以。所以,spark程序在最后必须有action类的算子。如果有时候action类型的算子是多余的,那么可以在最后使用RDD.foreach()类来触发RDD的执行。

RDD是相连的,一个RDD产生另一个RDD,或者多个RDD产生多个RDD,当得到我们希望的RDD之后,就执行action算子,触发前面RDD的执行。如果前面某一个RDD数据丢失了,spark框架会从数据丢失的RDD前面的RDD中再次计算出这个RDD。比如在上图中,在计算G的RDD的时候,发现B的RDD数据丢失了,那么spark会自动从A的RDD中计算再次生成B的RDD。如果A的RDD也有问题,那么spark就从原始数据集中重新开始计算。这里就体现了Spark框架的容错机制–和hadoop完全不一样的容错机制,后者是通过副本冗余来实现的。很多时候,为了避免重新计算RDD,编程人员可以使用RDD的cache()函数把这个RDD缓存在内存中(也可以保存在硬盘中),当其他多个RDD都用到之前已经缓存的RDD的时候,就可以从内存中读取它了,而不是再次计算。

RDD总结:

  • RDD是scala中的一个抽象类,保存着相关数据
  • 不可修改
  • 分为transformation和action两种类型,后者才能触发RDD的执行
  • 通过重新计算来实现容错。
  • spark编程其实就是对RDD算子的操作

本人还写了一篇总结和理解RDD算子操作的文章Spark算子汇总和理解(详细)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值