Spark Learning(RDD介绍)

RDD介绍


RDD可以通过两种方式创建:由一个存在的Scala集合,如 var rdd = sc.parallelize(1 to 10) ;由外部存储系统的数据集创建,包括本地文件系统 var rdd = sc.textFile(“xx.txt”),或者所有hadoop支持的数据集,比如HDFS、Cassandra、HBase、Amazon S3等。

  • RDD每次转换都会生成一个新的RDD,所以RDD之间就会形成类似于流水线一样的前后依赖关系,在部分分区数据丢失时,Spark可以通过这个依赖关系重新计算丢失的分区数据,而不是对RDD的所有分区进行重新计算。

  • Spark实现了两种类型的分片函数,一个是基于哈希的HashPartitioner,另一个是基于范围的RangePartitioner。只有基于key-value的RDD,才会有Partitioner。

  • 对于一个HDFS文件来说,每一个RDD存储列表保存的是每个Partitioner所在块的位置。Spark在进行任务调度的时候,会尽可能将计算任务分配到其所要处理数据块的存储位置。


RDD支持两种操作,转换(Transformation)和动作(Action)。

Transformation:从现有数据集创建新的数据集,如map、filter、groupBy、join等。
Action:数据集进行计算,返回一个值给Driver,如reduceByKey、collect、count、saveAsTextFile等。


RDD 缓存(Cache)和 检查点(Checkpoint)机制。

  • Spark速度非常快原因之一就是不同的操作可在内存中持久化(或缓存)数据集,并可在其他动作中重用。

    例如,假设首先进行了RDD0—RDD1—RDD2的计算作业,那么在进行RDD0—RDD1—RDD3的作业时,由于RDD1在第一次计算中已经缓存到系统,因此RDD0—RDD1的转换不会重复进行,大大提高了计算效率。

    cache:通过 persist()cache() 方法可以标记一个要被持久化的RDD,其中cache() 等价于persist(StorageLevel.MEMORY_ONLY)。

  • RDD缓存能在第一次计算完成后,将计算结果缓存到内存、本地文件系统中,但如果缓存丢失了,则需要重新计算。为了避免缓存丢失重新计算带来的开销,Spark引入了检查点(CheckPoint)机制。

    检查点是在计算完成后,重新建立一个job来计算。

    checkpoint:数据集进行计算,返回一个值给Driver,如reduceByKey、collect、count、saveAsTextFile等。

为了引入检查点机制后的重复计算,一般是通过先将RDD缓存,这样就能保证检查点的操作可以快速完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值