您的位置:首页 > 其它

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形式,并不会触发真正的计算
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: