RDD

RDD(Resilient Distributed Datasets),弹性分布式数据集, 它是一种特殊集合,支持多种来源,有容错机制,能够被缓存,支持并行操做

spark编程模型的最主要抽象,第一个是RDD,第二个抽象是两种共享变量,即支持并行计算的广播变量和累加器

spark一切都是基于RDD的,RDD就是SPARK输入的数据,把RDD理解成一个提供了许多操做接口的数据集合

RDD的操做类型分为两类,转换(transformations),它将根据原有的RDD建立一个新的RDD;行动(actions),对RDD操做后把结果返回给driver。例如,map是一个转换,它把数据集中的每一个元素通过一个方法处理后返回一个新的RDD;而reduce则是一个action,它收集RDD的全部数据后通过一些方法的处理,最后把结果返回给driver。

RDD的全部转换操做都是lazy模式,即Spark不会马上计算结果,而只是简单的记住全部对数据集的转换操做。这些转换只有遇到action操做的时候才会开始计算

rdd包含五个特征:

一个分片列表 partition list
一个计算函数compute,对每个split进行计算
对其余rdd的依赖列表dependencies list.依赖又份 宽依赖和窄依赖。
partitioner for key-value RDDs.好比说 hash-partitioned rdd(这是可选的,并非全部的add都会有这个特征)
对每个split计算的优先位置 Preferred Location。好比对一个hdfs文件进行计算时,能够获取优先计算的block locations

spark中的依赖关系主要体现为两种形式,窄依赖和宽依赖


RDD建立方式
1)从Hadoop文件系统(如HDFS、Hive、HBase)输入建立。
2)从父RDD转换获得新RDD。
3)经过parallelize或makeRDD将单机数据建立为分布式RDD。
4)基于DB(Mysql)、NoSQL(HBase)、S3(SC3)、数据流建立。

每当一个job计算完成,其内部的全部RDD都会被清除,若是在下一个job中有用到其余job中的RDD,会引起该RDD的再次计算,为避免这种状况,咱们可使用persist方法“持久化”一个RDD到内存中。sql

flatmap和map的区别

- Spark 中 map函数会对每一条输入进行指定的操做,而后为每一条输入返回一个对象;

- 而flatMap函数则是两个操做的集合——正是“先映射后扁平化”:

   操做1:同map函数同样:对每一条输入进行指定的操做,而后为每一条输入返回一个对象

   操做2:最后将全部对象合并为一个对象
相关文章
相关标签/搜索