这一次我们主要说下RDD,作为Spark中的核心概念
RDD是Spark中分布式数据集的抽象,囊括了所有内存中和磁盘中的分布式数据实体,
上一次我们把RDD比作数组,其实两者是有相似的,但是相比较数组,RDD的数据集是跨进程的,跨节点的,活动范围是整个集群的。
对于RDD,其中具有四大属性,分别是:
partitions: 数据分片
partitioner: 分片切割规则
dependencies: RDD依赖
compute: 转换函数
而如何理解四个属性呢?
对于Spark来说
数据在流转过程中,给予每一个算子的,是一个以分区为单位的RDD数组,其中包含了多个数据
其次是partitioner,分片切割规则,用户明确当一个数据到来之后,应该分配给哪一个算子上进行计算
之后是依赖,就是RDD会通过dependencies属性来依赖的前一个或者多个RDD,称为父RDD,也就是根据dependencies来记录之前属于的哪个RDD
最后是compute,就是将RDD的状态从A转换到B,也就是上一章的从lineRDD转换到wordRDD的map转换函数
按照上一章的流程代码的可以将4大属性对应到代码为:
我们声明的lineRDD和wordRDD对应的就是RDD概念。
具体的流转数据,就是对应的partitions属性
之后的reduceByKey,其中包含了首先根据key进行分区,对应的就是partitioner属性
然后其中每一个RDD中都记录了历史形态,对应的就是dependencies属性
然后其中RDD的转换方法就是其中的compute属性