【赵渝强老师】Spark RDD的缓存机制

Spark RDD通过persist方法或cache方法可以将计算结果的缓存,但是并不是这两个方法被调用时立即缓存,而是触发后面的action时,该RDD才会被缓存在计算节点的内存中并供后面重用。下面是persist方法或cache方法的函数定义:

scala 复制代码
def persist(): this.type = persist(StorageLevel.MEMORY_ONLY)
def cache(): this.type = persist()
视频讲解如下
【赵渝强老师】Spark RDD的缓存机制

通过函数的定义发现,cache最终也是调用了persist方法,默认的存储级别都是仅在内存存储一份,Spark在object StorageLevel中定义了缓存的存储级别。下面是在StorageLevel中的定义的缓存级别。

scala 复制代码
val NONE = new StorageLevel(false, false, false, false)
val DISK_ONLY = new StorageLevel(true, false, false, false)
val DISK_ONLY_2 = new StorageLevel(true, false, false, false, 2)
val MEMORY_ONLY = new StorageLevel(false, true, false, true)
val MEMORY_ONLY_2 = new StorageLevel(false, true, false, true, 2)
val MEMORY_ONLY_SER = new StorageLevel(false, true, false, false)
val MEMORY_ONLY_SER_2 = new StorageLevel(false, true, false, false, 2)
val MEMORY_AND_DISK = new StorageLevel(true, true, false, true)
val MEMORY_AND_DISK_2 = new StorageLevel(true, true, false, true, 2)
val MEMORY_AND_DISK_SER = new StorageLevel(true, true, false, false)
val MEMORY_AND_DISK_SER_2=new StorageLevel(true, true, false, false, 2)
valOFF_HEAP = new StorageLevel(true, true, true, false, 1)

需要说明的是,使用RDD的缓存机制,数据可能丢失;或者会由于内存的不足而造成数据被删除。可以通过使用RDD的检查点机制了保证缓存的容错,即使缓存丢失了也能保证计算的正确执行。

下面是使用RDD缓存机制的一个示例。这里使用RDD读取一个大的文件,该文件中包含918843条记录。通过Spark Web Console可以对比出在不使用缓存和使用缓存时,执行效率的差别。

(1)读取一个大文件。

scala 复制代码
scala> val rdd1 = sc.textFile("/root/temp/sales")

(2)触发一个计算,这里没有使用缓存。

scala 复制代码
scala> rdd1.count

(3)调用cache方法标识该RDD可以被缓存。

scala 复制代码
scala> rdd1.cache

(4)第二次触发计算,计算完成后会将结果缓存。

scala 复制代码
scala> rdd1.count

(5)第三次触发计算,这里会直接从之前的缓存中获取结果。

scala 复制代码
scala> rdd1.count

(6)访问Spark的Web Console观察这三次count计算的执行时间,可以看成最后一次count计算只耗费了98ms,如下图所示。

相关推荐
北方的银狐-Zero5 小时前
ERP 管执行,数据管标准,OntoL本体 管思考:企业智能化升级的规划图
大数据·人工智能·本体论
四季豆335 小时前
数据质量管理的内涵与评估
大数据
净水深流6 小时前
中央厨房冷链技术实践:多温区改造、WMS落地与IoT温控架构
大数据·数据库·人工智能·冷库冷链
是Yu欸7 小时前
鸿蒙PC移植:2048 从网页小游戏到 AI 桌面应用
大数据·人工智能·算法·数据挖掘·openharmony·codex
智搜广告7 小时前
智搜广告:科技行业AI回答优化公司如何破局
大数据·python·elasticsearch·geo
湘美书院--湘美谈教育7 小时前
湘美书院AI时代的禅悟集:人机智能,反照诸我
大数据·人工智能·深度学习·机器学习·生活
电商API_1800790524710 小时前
拍照找同款是怎么实现的?淘宝以图搜图接口 item_search_img 对接实战
大数据·爬虫·数据挖掘·数据分析·代采api
洋洋不叫杨杨11 小时前
Codex 实战:用 AI 写运维脚本
大数据·python
Regentsoft丽晶软件11 小时前
即时零售退货的库存归属、质检标准和退款时效,系统如何做到自动闭环
大数据·经验分享·数据库架构