persist
persist() 用来设置RDD的存储级别. 常用的cache是persist的一种特例.
存储级别 | 意义 |
---|---|
MEMORY_ONLY | 将RDD作为反序列化的的对象存储在JVM中;如果RDD不能被内存装下,超出的分区将不会被缓存,并且在需要的时候被重新计算; 这是默认的级别. |
MEMORY_AND_DISK | 将RDD作为反序列化的的对象存储在JVM中;如果RDD不能被内存装下,超出的分区将被保存在硬盘上,并且在需要时被读取. |
MEMORY_ONLY_SER | 将RDD作为序列化的的对象进行存储(每一分区占用一个字节数组);通常来说,这比将对象反序列化的空间利用率更高,尤其当使用fast serializer,但在读取时会比较占用CPU |
MEMORY_AND_DISK_SER | 与MEMORY_ONLY_SER相似,并且超出内存的分区将存储在硬盘上,而不是在每次需要的时候重新计算. |
DISK_ONLY | 只将RDD分区存储在硬盘上. |
MEMORY_ONLY_2,MEMORY_AND_DISK_2, etc. | 与上述的存储级别一样,并且将每一个分区都复制到集群的两个结点上(备份). |
// 导入设置存储级别的类 import org.apache.spark.storage.StorageLevel // 生成RDD,并指定分区数 val rdd1 = sc.parallelize(List(1,2,3,4,5,6,7,8),8) // 设置存储级别 val rdd2 = rdd1.persist(StorageLevel.DISK_ONLY) rdd2.count() rdd1.persist()
cache和persist的区别: StorageLevel设定有12种缓存策略,可以根据自己的情况选择合适的. cache方法其实是persist方法的一个特例:调用的是无参数的persist(),代表缓存级别是仅内存的情况. 一般情况下建议使用persist(StorageLevel.MEMORY_AND_DISK)方法替代cache方法,以防止内存不足造成程序运行错误. persist方法有三种: 1.默认无参数仅内存级别的persist(); 2.persist(newLevel):这个方法需要之前对RDD没有设置过缓存级别; 3.persist(newLevel,allowOverride):这个方法适用于之前对RDD设置过缓存级别,但是需要修改缓存级别的情况.
unpersist
// unpersist() 用于删除磁盘或内存中的相关序列化对象.取消缓存统一使用unpersist()方法. rdd2.unpersist()
还没有评论,来说两句吧...