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

Spark RDD中的持久化

作者头像
天策
发布2018-06-22 14:30:06
7050
发布2018-06-22 14:30:06
举报
文章被收录于专栏:行者悟空行者悟空

持久化在早期被称作缓存(cache),但缓存一般指将内容放在内存中。虽然持久化操作在绝大部分情况下都是将RDD缓存在内存中,但一般都会在内存不够时用磁盘顶上去(比操作系统默认的磁盘交换性能高很多)。当然,也可以选择不使用内存,而是仅仅保存到磁盘中。所以,现在Spark使用持久化(persistence)这一更广泛的名称。

如果一个RDD不止一次被用到,那么就可以持久化它,这样可以大幅提升程序的性能,甚至达10倍以上。默认情况下,RDD只使用一次,用完即扔,再次使用时需要重新计算得到,而持久化操作避免了这里的重复计算,实际测试也显示持久化对性能提升明显,这也是Spark刚出现时被人称为内存计算的原因。

持久化的方法是调用persist()函数,除了持久化至内存中,还可以在persist()中指定storage level参数使用其他的类型。

storage level参数

storage level

说明

MEMORY_ONLY

默认的持久化级别,只持久到内存中(以原始对象的形式),需要时直接访问,不需要反序列化操作。内存不足时,多余的部分不会被持久化,访问时需要重新计算

MEMORY_AND_DISK

持久化到内存中,内存不足时用磁盘代替

MEMORY_ONLY_SER

类似于MEMORY_ONLY,但格式是序列化之后的数据(每个分区一字节数组),可以更节省内存,代价是消耗CPU

MEMORY_AND_DISK_SER

类似于MEMORY_ONLY_SER,内存不足时用磁盘代替

DISK_ONLY

只使用磁盘

*_2,比如MEMORY_ONLY_2和MEMORY_AND_DISK_2等

与上面的级别类似,但数据还复制到集群的另外一个节点上,总共两份副本,可提升可用性

此外,RDD.unpersist()方法可以删除持久化。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年01月23日,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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