前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RDD持久化原理

RDD持久化原理

作者头像
编程那点事
发布2023-02-25 15:46:20
2020
发布2023-02-25 15:46:20
举报
文章被收录于专栏:java编程那点事

Spark非常重要的一个功能特性就是可以将RDD持久化在内存中。当对RDD执行持久化操作时,每个节点都会将自己操作的RDD的partition持久化到内存中,并且在之后对该RDD的反复使用中,直接使用内存缓存的partition。这样的话,对于针对一个RDD反复执行多个操作的场景,就只要对RDD读取一次即可,后面直接使用该RDD,而不需要反复计算多次该RDD。

巧妙使用RDD持久化,甚至在某些场景下,可以将spark应用程序的性能提升10倍。对于迭代式算法和快速交互式应用来说,RDD持久化,是非常重要的。

要持久化一个RDD,只要调用其cache()或者persist()方法即可。在该RDD第一次被计算出来时,就会直接缓存在每个节点中。而且Spark的持久化机制还是自动容错的,如果持久化的RDD的任何partition丢失了,那么Spark会自动通过其源RDD,使用transformation操作重新计算该partition。

cache()和persist()的区别在于,cache()是persist()的一种简化方式,cache()的底层就是调用的persist()的无参版本,同时就是调用persist(MEMORY_ONLY),将数据持久化到内存中。如果需要从内存中清除缓存,那么可以使用unpersist()方法。

Spark自己也会在shuffle操作时,进行数据的持久化,比如写入磁盘,主要是为了在节点失败时,避免需要重新计算整个过程。

案例:持久化

代码语言:javascript
复制
/**

* RDD持久化

* @author Administrator

*

*/

public class Persist {

​public static void main(String[] args) {

SparkConf conf = new SparkConf().setAppName("Persist")​​​​.setMaster("local"); 

​​JavaSparkContext sc = new JavaSparkContext(conf);

​​// cache()或者persist()的使用,是有规则的

​​// 必须在transformation或者textFile等创建了一个RDD之后,直接连续调用cache()或persist()才可以

​​// 如果你先创建一个RDD,然后单独另起一行执行cache()或persist()方法,是没有用的

​​// 而且,会报错,大量的文件会丢失

​​JavaRDD<String> lines = sc.textFile("C://Users//Administrator//Desktop//spark.txt")​​​​.cache();

lines.cache()

​​long beginTime = System.currentTimeMillis();

​​long count = lines.count();

System.out.println(count);  

​​long endTime = System.currentTimeMillis();

​​System.out.println("cost " + (endTime - beginTime) + " milliseconds.");   

​​beginTime = System.currentTimeMillis();

​​count = lines.count();

​​System.out.println(count);  

​​endTime = System.currentTimeMillis();

​​System.out.println("cost " + (endTime - beginTime) + " milliseconds.");

​​sc.close();
​}
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-02-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档