Spark中已有含多存储选项的persist,为何还要使用cache?
为什么Spark里有persist还要用cache?
其实cache就是persist的简化封装,Spark源码里cache()方法本质就是调用persist(StorageLevel.MEMORY_ONLY),两者没有核心功能差异,使用cache的原因主要有这几点:
- 代码更简洁:如果你的场景刚好只需要将RDD/DataFrame持久化到内存(这是最常见的缓存场景),用
cache()比写persist(StorageLevel.MEMORY_ONLY)要短很多,代码可读性也更高。 - 符合常规开发习惯:Spark早期版本就提供了cache方法,很多开发者已经形成了“内存缓存就用cache”的直觉,不需要特意去记StorageLevel的参数常量名。
- 语义更清晰:cache的字面意思就是“缓存”,对于只需要内存缓存的场景,用它能更直白地表达代码意图,不需要让其他阅读者去解读StorageLevel参数。
举个代码对比的例子:
// 用cache实现内存缓存 df.cache() // 用persist实现等价的内存缓存 df.persist(StorageLevel.MEMORY_ONLY)
当然,如果需要更复杂的存储策略(比如内存+磁盘混合存储、序列化存储等),还是得用persist指定对应的StorageLevel,但对于绝大多数内存缓存的常规场景,cache足够用且更顺手。
内容的提问来源于stack exchange,提问作者ashish kosare
相关产品推荐
相关产品推荐

