RDD是Spark应用程序开发过程中最为基本也最为重要的一类数据结构,RDD被定义为只读、分区化的记录集合,更为通俗来讲,RDD是对原始数据的进一步封装,封装导致两个结果:第一个结果是数据访问权限被限制,数据只能被读,而无法被修改;第二个结果是数据操作功能被强化,使得数据能够实现分布式存储、并发处理、自动容错等诸多功能。Spark的整个计算过程都是围绕数据集RDD来进行,下面将会对RDD的创建以及数据结构进行简单介绍。
1.RDD的两类来源
1)将未被封装的原始数据进行封装操作得到,根据原始数据的存在形式,又可被进一步分成由集合并行化获得或从外部数据集中获得。
2)由其他RDD通过转换操作获得,由于RDD的只读特性,内部的数据无法被修改,因此RDD内部提供了一系列数据转换(Transformation)操作接口,这类接口可返回新的RDD,而不影响原来的RDD内容。在后面第3章的3.3节中将会对RDD的创建方法进行更加详尽的说明。
2.RDD内部数据结构
1)分区信息的列表
2)对父RDD的依赖信息(https://www.xing528.com)
3)对Key-Value键值对数据类型的分区器(可选)
4)计算分区的函数
5)每个数据分区的物理地址列表(可选)
RDD的数据操作并非在调用内部接口的一刻便开始计算,而是遇到要求将数据返回给驱动程序,或者写入到文件的接口时,才会进行真正的计算,这类会触发计算的操作称为动作(Action)操作,而这种延时计算的特性,被称为RDD计算的惰性(Lazy),在第六章机篇将分别讲述动作操作和惰性特征。
在第1章中说过,Spark是一套内存计算框架,其能够将频繁使用的中间数据存储在内存当中,数据被使用的频率越高,性能提升越明显。数据的内存化操作在RDD层次上,体现为RDD的持久化操作,会在3.3.5节描述RDD的持久化操作。除此之外,RDD还提供了类似于持久化操作的检查点机制,表面看上去与存储在HDFS的持久化操作类似,实际使用上又有诸多不同,会在3.3.6小节描述RDD的检查点机制。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。
