Din*_*108 11 scala apache-spark
我理解Scala中有两种类型的操作
像map(),filter()这样的转换是懒惰的.因此,可以在Action执行上完成该优化.例如,如果我执行action first(),那么Spark将优化为只读取第一行.
但是为什么persist()操作会被懒惰地评估.因为无论我采取哪种方式,热切地或懒惰地,它都将按照存储级别保持整个RDD.
能否详细说明为什么persist()是转型而不是行动.
zer*_*323 11
对于初学者来说,渴望持久会污染整个管道.cache或persist只表达意图.这并不意味着我们将在RDD实现并且可以实际缓存时达到目的.此外,存在自动缓存数据的上下文.
因为无论我采取哪种方式,热切地或懒惰地,它都将按照存储级别保持整个RDD.
这不完全正确.事情是,persist不是持久的.因为它明确规定了文档中的MEMORY_ONLY持续等级:
如果RDD不适合内存,则某些分区将不会被缓存,并且每次需要时都会重新计算.
随着MEMORY_AND_DISK剩余的数据存储到磁盘上,而仍然被驱逐,如果没有足够的内存用于后续缓存.更重要的是:
Spark会自动监视每个节点上的缓存使用情况,并以最近最少使用(LRU)的方式删除旧数据分区.
您还可以认为cache/ persist在语义上与为特定IO副作用执行的Spark操作不同.cache更多的是我们可能希望稍后重用这段代码的Spark引擎的提示.
| 归档时间: |
|
| 查看次数: |
4628 次 |
| 最近记录: |