RDD介绍

时间: | 分类: spark学习

RDD是Spark的核心抽象

弹性分布式数据集(RDD, resilient distributed datasets),他表示以被分区、只读的、并提供了一组丰富的操作方式来操作这些数据集合。这些数据集的全部或部分可以缓存在内存中,在多次计算见重复使用,省去了大量的磁盘IO操作。

RDD提供了一种高度受限的共享内存,即RDD只能基于在稳定物理存储中的数据集和其他已有的RDD上的执行批量操作(map,join和group by)来创建。RDD通过Lineage机制来重建丢失的分区:一个RDD中包含了如何从其他RDD衍生(计算)出本RDD所以虚的信息(Lineage),所以可以从物理存储的数据计算出相应的RDD分区而不要检查点操作就可以重构丢失的数据分区。

RDD的特征:
  • 一组RDD分区(partition,数据集的原子组成部分)
  • 计算每个分片的函数(根据父RDD计算出此RDD)
  • 对父RDD的一组依赖,这些依赖描述了RDD的lineage

    • 窄依赖:

      • map,filter
      • union
      • join with inputs co-partitioned
    • 宽依赖:

      • groupByKey
      • join with inputs not co-partitioned
  • key-value型的RDD是根据哈希算法来区分的,可以由RDD的具体子类来制定自己的分区类型
  • 每一个分片的优先计算位置(preferred location)可以由RDD的具体子类来指定自己的优先计算位置

RDD的分类操作

输入操作
  • Scala集合转换输入
  • 外部文件存储系统输入

    • 使用textFile方法可以将本地文件或HDFS文件转换成RDD
    • hadoopFile可以从Hadoop相关的文件系统读取文件
    • newAPIHadoopFile
    • wholeTextFiles
转换操作
  • value型数据转换操作

    • map方法将RDD中类型为T的元素,通过map中的用户自定义函数f一对一地映射位U类型的元素。新产生的RDD 的实际类型是MappedRDD
    • mapPartitions与map转换类似,但输入参数由RDD中的每一个元素变成了RDD中每一个分区的迭代器,通过这个分区的迭代器对整个分区的元素进行操作。最后生成MapPartitionRDD
行动操作
  • Scala集合标量操作
  • 输出数据到外部文件存储系统的action操作
控制操作
  • 持久化操作
  • checkpoint操作

RDD



失学失业还秃头


文章归档