Spark中RDD

**

RDD

**
RDD叫做弹性分布式数据集。是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的几个。
RDD具有数据流模型的特点,自动容错、位置感知性调度和可伸缩性。

RDD是一个应用层面的逻辑概念。一个RDD多个分片。RDD就是一个元数据记录集,记录了RDD内存所有的关系数据。

基于RDD之间的依赖,RDD会形成一个有向无环图DAG,该DAG描述了整个流式计算的流程,实际执行的时候,RDD是通过血缘关系一气呵成的,即使出现数据分区丢失,也可以通过血缘关系重建分区。

spark-RDD的关系类似于Hadoop-MapReduce的关系。

RDD是只读的,要想改变RDD中的数据,只能在现有的RDD基础上创建新的RDD。

操作算子的两大类

transformations
它是用来将RDD进行转化,构建RDD的血缘关系。
actions
它是用来触发RDD的计算,得到RDD的相关计算结果或者将RDD保存的文件系统中。

CheckPoint
checkpoint将数据保存到持久化的存储中,这样可以切断之前的血缘关系,RDD不再知道父RDDs,它可以从checkpoint处拿到数据。

创建RDD的三种方式
第一种:由已存在的集合创建
val rdd1=sc.parallelize(Array(1,2,3,4,5,6,7))
第二种:由外部存储文件创建
val rdd2=sc.textFile("/word.txt")
第三种:由已有的RDD经过算子转换,生成新的RDD
val rdd3=rdd2.flatMap(_.split(" "))

算子
transformation常用的操作

  1. map:返回一个新的RDD,该RDD由每一个输入元素经过Function函数转换后组成。
  2. filter:返回一个新的RDD,该RDD由经过Function函数计算后返回值为true的输入元素组成。
  3. flatMap:类似于map,但是每一个输入元素可以被映射为0或对个输出元素。
  4. mapPartitions:类似于map,但独立地在RDD的每一个分片上运行。
  5. mapPartitionsWithIndex:类似于mapPartition是,但Function带有一个整数参数表示分片的索引值。
  6. union:对源RDD求并集。
  7. intersection:对源RDD个参数RDD求交集后返回一个新的RDD。
  8. distinct:对于原RDD进行去重后返回一个新的RDD。
  9. partitionBy:对RDD进行分区操作,如果原有的partionRDD和现有的partionRDD是一致的话就不进行分区。
  10. reduceByKey:在一个(K,V)的RDD上调用,返回一个(K,V)的RDD,使用指定的reduce函数。将相同的key的值聚合到一起。
  11. groupByKey:也是对每个可以进行操作,但只生成一个sequence.
  12. combineByKey:对相同k,把V合并成一个集合。
  13. foldByKey:aggregate的简化操作,
  14. sortByKey:在一个(K,V)的RDD上调用,K必须实现Ordered接口,返回一个按照key进行排序的(K,V)的RDD。
  15. sortBy:与sortByKey类似,可以用Function先对数据进行处理,按照处理后的数据比较结果排序。
  16. join:在类型(K<V)和(K,W)的RDD上调用,返回一个相同key对应的所有元素对在一起(K,(V,W))的RDD。
  17. cogroup:在类型为(K,V)和(K,W)的RDD上调用,返回一个(K,(Iterable,Iterable))类型的RDD。
  18. cartesian:笛卡尔积。
  19. pipe:对每个分区,都执行一个perl或者shell脚本,返回输出的RDD。
  20. glom:将每一个分区形成一个数组,形成新的RDD类型是RDD【Array【T】】
  21. mapValues:针对于(K,V)形式的类型只对V进行操作。
  22. subtract:计算差的一种函数去除两个RDD中相同的元素,不同的RDD将保留下来。

Action常用的操作

  1. reduce:通过Function函数聚集RDD中的所有元素,这个功能必须是可交换且可并联的。
  2. collect:在驱动程序中,以数组的形式返回数据集的所有元素。
  3. count:返回RDD的元素个数。
  4. first:返回RDD的第一个元素。
  5. take:返回一个由数据集的前n个元素组成的数组。
  6. takeSample(withReplacement,num,[seed]):返回一个数组,该数组由从数据集中随机采样的Num个元素组成,可以选择是否用随机数替换不足的部分,seed用于指定随机数生成器种子。
  7. takeOrdered:返回前几个的排序。
  8. aggregate:将每个分区里面的元素通过seqOp和初始值进行聚合,然后用combine函数将每个分区的结果和初始值进行combine操作,
  9. fold:折叠操作,aggregate的简化操作。
  10. saveAsTextFile:将数据集的元素以textFile的形式保存到HDFS文件系统或者其他支持的文件系统,对于每个元素,Spark将会调用toString方法,将它换为文件中的文本。
  11. saveAsSequenceFile:将数据集中的元素以Hadoop sequencefile的格式保存到指定的目录下。
  12. saveAsObjectFile:用于将RDD中的元素序列化成对象,存储到文件中。
  13. countByKey:针对(K,V)类型的RDD,返回一个(K,Int)的map.
  14. foreach:在数据集的每一个元素上,运行函数Function进行更新。

RDD的依赖
RDD和它依赖的父RDD的关系有两种不同的类型,即窄依赖和宽依赖。
窄依赖:是每一个父RDD的partition最多被子RDD的一个Partition使用。
宽依赖:指的是多个子RDD的Partition会依赖同一个父RDD的partition。

血统:可以恢复丢失的分区。RDD的lineage会记录RDD的元数据信息和转换行为,当该RDD的部分分区数据丢失时,它可以根据这些信息来重新运算和回复丢失的数据分区。

RDD的缓存

有persist方法和cache方法
cache()调用persist()。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值