说明
本博客每周五更新一次。 RDD 是spark计算引擎重要的数据结构,使用RDD开发业务,必须深入学习使用它。
什么是RDD
- RDD(Resilient Distributed Dataset) 弹性分布式数据集,spark中最重要数据结构概念,代表一个不可变、可分区、可并行计算的集合,逻辑上是一个数据集,物理上可以分块分布在不同的机器上并发运行。
- RDD具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性,能分布在集群的节点上,以函数式操作集合的方式,进行各种并行计算。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度。
- RDD内置大量函数,可以大大提升开发效率,快速完成功能开发。
RDD生命周期
- spark程序中,首先创建或读取RDD,然后对数据进行一系列一次或多次变换操作(Transform),并对保存中间结果(Cache),最后对结果进行处理(Action)。
创建RDD
- RDD的创建可以通过对内存中的数据并行化计算结果,或直接读取分布式数据库(S3, HDFS, Cassandra 等等)创建,也可以直接读取本地文件创建。
RDD变换
- RDD变换操作支持数据变换接口,常见如filter, map等等,执行到变换代码是,RDD数据并不立即发生实际变化(Lazily transform),而是保存数据的依赖关系,直到最终RDD进行动作(Action)时。RDD系统从全局角度来优化Transform的运行过程,节省计算时间。
RDD缓存
- 缓存(cache)操作将数据的中间结果保存在内存中,以便反复使用。
RDD结果处理
- RDD结果处理(action)操作将数据的运算结果进行统计和返回。常见如count 和 collect。
RDD特性
RDD默认有如下重要特性。
- 如何分块(Partition)
- 与父RDD依赖关系(Dependency)
- 从父RDD求子RDD的函数(Function)
- 当前RDD存储位置(Preferred Localtion)
- 存储RDD分块类(Partitioner)
RDD限制
- 没有任何内置优化引擎
- 不能处理结构化数据
RDD函数
RDD的创建有两种常用方式:
- sc.parallelize()
- sc.makeRDD()
总结
- RDD是Spark数据集合的一种,还有DataFrame、DataSet等。