背景
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所带来的时间