1.11学习总结:持久化

一、持久化

多次计算时,可能会重复利用一个数值,每次需要从头到尾的计算得出这个数值较为麻烦,所以可以将此RDD持久化,直接使用

二、实例

 在此代码中,第一次执行计算是rdd.count()函数,当执行到rdd.collect()时,会重复执行之前的代码,rdd会被重复生成并计算

三、持久化方式

可以使用persist()方法将一个RDD持久化,但是只是标记为持久化,只有当第一个行动操作执行后才会被真正持久化

持久化级别 说明

MEMORY_ONLY

使用未序列化的Java对象格式,将数据保存在内存中。如果内存不够存放所有的数据,则数据可能就不会进行持久化。那么下次对这个RDD执行算子操作时,那些没有被持久化的数据,需要从源头处重新计算一遍。
MEMORY_AND_DISK 使用未序列化的Java对象格式,优先尝试将数据保存在内存中。如果内存不够存放所有的数据,会将数据写入磁盘文件中,下次对这个RDD执行算子时,持久化在磁盘文件中的数据会被读取出来使用。
MEMORY_ONLY_SER 基本含义同MEMORY_ONLY。唯一的区别是,会将RDD中的数据进行序列化,RDD的每个partition会被序列化成一个字节数组。这种方式更加节省内存,从而可以避免持久化的数据占用过多内存导致频繁GC。
MEMORY_AND_DISK_SER 基本含义同MEMORY_AND_DISK。唯一的区别是,会将RDD中的数据进行序列化,RDD的每个partition会被序列化成一个字节数组。这种方式更加节省内存,从而可以避免持久化的数据占用过多内存导致频繁GC。
DISK_ONLY 使用未序列化的Java对象格式,将数据全部写入磁盘文件中。

四、学习视频

https://www.bilibili.com/video/BV1oE411s7h7?p=26

原文地址:https://www.cnblogs.com/wangzhaojun1670/p/14326227.html