【spark】cache不一定使用的场景

背景

spark的transform是lazy模式的,只有当action时才会触发真正的执行。大部分情况下,如果某个df、rdd下游有多个链路,为了避免重复执行,一般会对该算子进行cache

场景

在某个stage阶段,存在一个RDD,transform完成后可能存在数亿的结果

在调试阶段,我们需要预览其数据,需要多次使用rdd.take(10).foreach(println)。

大部分情况我们会对rdd进行cache。但实际情况是,该rdd前有10多个map之类的窄依赖。当使用cache之后,在使用rdd.take(10)时会触发action,cache会将该stage阶段所有的数据执行一遍。而去除cache后,该stage阶段,只会取前10条计算。

 

因此,当原始数据巨大时,而action使用take等操作时,其执行时间会远远小于cache所带来的时间 

posted @ 2021-05-08 10:38  周周周文阳  阅读(209)  评论(0编辑  收藏  举报