spark实战之RDD的cache或persist操作不会触发transformation计算
2018-02-24 10:16
295 查看
默认情况下RDD的transformation是lazy形式,实际计算只有在ation时才会进行,而且rdd的计算结果默认都是临时的,用过即丢弃,每个action都会触发整个DAG的从头开始计算,因此在迭代计算时都会想到用cache或persist进结果进行缓存。敝人看到很多资料或书籍有的说是persist或cache会触发transformation真正执行计算,有的说是不会!敝人亲自实验了一把,最终确认cache或persist不会触发真正的计算,而是要等到第一个ation时才会真正执行计算并缓存结果。下面是《spark最佳实践》的描述,其实是错误的
证明过程很简单,hdfs://store-product-search01.beta1.fn:9000/data/in/spark/example/resoures2 假设这个目录不存在
val rdd =sc.textFile("hdfs://store-product-search01.beta1.fn:9000/data/in/spark/example/resoures2/") 执行这条语句不会报错,因为rdd的创建是lazy形式
接下来执行,rdd.cache或rdd.persist 也不会抛出异常,当执行rdd.count时会报“Input path does not exist: hdfs://store-product-search01.beta1.fn:9000/data/in/spark/example/resoures2”这个异常,因此可以说rdd.cache或rdd.persist也是lazy形式,并不会触发真正的计算
证明过程很简单,hdfs://store-product-search01.beta1.fn:9000/data/in/spark/example/resoures2 假设这个目录不存在
val rdd =sc.textFile("hdfs://store-product-search01.beta1.fn:9000/data/in/spark/example/resoures2/") 执行这条语句不会报错,因为rdd的创建是lazy形式
接下来执行,rdd.cache或rdd.persist 也不会抛出异常,当执行rdd.count时会报“Input path does not exist: hdfs://store-product-search01.beta1.fn:9000/data/in/spark/example/resoures2”这个异常,因此可以说rdd.cache或rdd.persist也是lazy形式,并不会触发真正的计算
相关文章推荐
- Spark核心编程:操作RDD(transformation和action案例实战)
- Spark RDD/Core 编程 API入门系列 之rdd实战(rdd基本操作实战及transformation和action流程图)(源码)(三)
- Spark 2.0从入门到精通245讲——操作RDD(transformation案例实战)
- day16:RDD实战(RDD基本操作实战及Transformation流程图)
- poi 操作 excel 里面设置的公式不会自动计算 需要双击才会触发
- Spark RDD的缓存 rdd.cache() 和 rdd.persist()
- spark RDD transformation操作
- spark RDD transformation和action操作
- Spark RDD中cache和persist的区别
- spark graphx图计算常用操作实战
- 【Spark】RDD处理程序运行原理解释和它的Transformation和Actions操作详解
- Spark总结(二)——RDD的Transformation操作
- Spark 2.0从入门到精通245讲——操作RDD(action案例实战)
- spark内核揭秘-09-RDD的count操作 触发Job全生命周期-01
- Spark RDD概念学习系列之transformation操作
- Spark RDD中cache和persist的区别
- spark中cache和persist的区别,rdd缓存源码解析
- spark内核揭秘-09-RDD的count操作 触发Job全生命周期-01
- 【Spark】RDD操作详解1——Transformation和Actions概况
- Spark之RDD的Transformation操作