spark持久化(缓存)

来源:互联网 发布:js math ceil 编辑:程序博客网 时间:2024/05/16 01:48

1、惰性求值:
RDD转化过程都是惰性求值的。这意味着在被调用行动操作之前spark不会开始计算,spark会在内部记录下所要求执行的操作的相关信息,我们可以把每个RDD看作我们通过转化操作构建出来的、记录如何计算数据的指定列表。把数据读取到RDD的操作同样是惰性的。

2、持久化缓存
SparkRDD是惰性求值的,而有时候我们希望能够多次使用同一个RDD。如果简单地对RDD调用行动操作,Spark每次都会重算RDD以及它的所有依赖。这在迭代算法中消耗很大。
此时我们可以让spark对数据进行持久化操作。当我们让Spark持久化存储一个RDD时,计算出的RDD节点会分别保存它们所求出的RDD分区数据。如果一个有持久化数据的节点发生故障,Spark会在需要用到缓存数据时重算丢失的数据分区。我们可以把我们的数据备份到多个节点避免这种情况发生。

注意:序列化是执行上面的基础。

val result = input.map { x => x * x      result.persist(StorageLevel.DISK_ONLY)      println(result.count())println(result.collect.mkString(","))

Spark还有一个unpersist()方法,调用该方法可以手动把持久化RDD从缓存中移除。

1 0