RDD的特性二 : RDD的缓存
一、RDD缓存的意义
首先让我们来看一个小案例
查看数据集

需求:
- 统计访问最多的IP,以及最少的IP
步骤
- 创建sc
- 读取文件获取数据集
- 取出IP相关信息
- 简单清洗数据
- 统计IP出现的系数
- 统计出现系数最少的IP
- 统计出现次数最多的IP
代码

在以上的案例中我们对数据集中的IP相关信息进行了提取,并且操作分析。在Spark-core中转换算子的作用是生成新的RDD,以及RDD之间的依赖关系(逻辑执行计划),行动算子的作用是生成job,有后续的执行端去执行物理计划,每一次行动算子的执行都会重新执行一次所有转换操作。在统计IP出现次数最多和最少的时候,我们进行了两次first的action操作,而在每一次的action操作中,又包含有两次shuffle操作(reducebykey、sortby),所以共会执行4次shuffle操作,而shuffle操作会在集群内对数据进行大量的拷贝,这样一来对于内存压力就会很大,例如上面的数据集下载下来有1G多,当然这样的数据量相对还是很少的,假如说是按照T级来运行的数据集,那就会有些慢了。这时就需要用到RDD的缓存,缓存的意义就在于在执行多个job的时候将转换操作(逻辑计划)缓存下来,直接使用,不需要重复的进行计算。
补充:

二、RDD缓存的API
1. cache()

由上面案例可以看出使用了cache()方法进行缓存之后,代码的执行时间会有所缩短,当数据量十分庞大的时候就会十分有效。
2. persist()

三、存储的级别:
1.使用缓存的作用
2.缓存级别的设置与查看
3.缓存级别
源码:


补充:


















