scala – 为什么在Spark中懒惰地评估persist()
我理解
Scala中有两种类型的操作
>转型 像map(),filter()这样的转换是懒惰的.因此,可以在Action执行上完成该优化.例如,如果我执行action first(),那么Spark将优化为只读取第一行. 但是为什么persist()操作会被懒惰地评估.因为无论我采取哪种方式,急切地或懒惰地,它都将按照存储级别保留整个RDD. 能否详细说明为什么persist()是转型而不是行动. 解决方法
对于初学者来说,渴望持久会污染整个管道.缓存或持久化仅表达意图.这并不意味着我们将永远达到RDD实现并且可以实际缓存的程度.此外,还有自动缓存数据的上下文.
这不完全正确.事实是,坚持并不是持久的.正如MEMORY_ONLY持久性级别清楚地说明in the documentation:
使用MEMORY_AND_DISK,剩余数据将存储到磁盘,但如果没有足够的内存用于后续缓存,则仍可以将其逐出.更重要的是:
您还可以认为缓存/持久性在语义上与针对特定IO副作用执行的Spark操作不同.缓存更像是一个Spark引擎的提示,我们可能希望以后重用这段代码. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |