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到内存中。
flatmap和map的区别
- Spark 中 map函数会对每一条输入进行指定的操作,然后为每一条输入返回一个对象;
- 而flatMap函数则是两个操作的集合——正是“先映射后扁平化”:
操作1:同map函数一样:对每一条输入进行指定的操作,然后为每一条输入返回一个对象
操作2:最后将所有对象合并为一个对象
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。