前言
最近在用Spark做一些数据统计,有个任务要跑几个小时,所以需要优化一下。首先想到的是用 persist或者cache(persist的其中一种方式)
正文
场景一
首先看看在Stackoverflow的一个回答
Spark很多惰性算子,它并不会立即执行,persist就是惰性的。只有当被action trigger的时候,叫 lineage的RDD 链才会被执行。
如果是线性的lineage的话,persist是没用的。但如果RDD的lineage被分流出去的话,那么persist就有用了。
举个例子:
|
|
另外一个案例:
上述例子中,如果不加cache的话。log中可以看到打印了两次 1134021255504498689。而且会看到有两条这样的信息:
测试结论!
说明csv文件被load了两次!!!
如果用了cache的话,只会出现一次!!!
场景二
Reference
https://stackoverflow.com/questions/28981359/why-do-we-need-to-call-cache-or-persist-on-a-rdd
https://blog.csdn.net/ainidong2005/article/details/53152605