Spark五 持久化缓存

原因:每次重算RDD和RDD的依赖,消耗大

原理:计算出RDD的节点分别保存计算出的分区数据

故障:如果出现故障,可以对故障节点分区的数据重算,或者为每个分区保存多个副本

策略:如果持久化数据的存储空间不足,会采用LRU的策略将分区从内存中移除

持久化级别 默认序列化的形式存储在JVM的堆空间中

MEMORY_ONLY

MEMORY_ONLY_SER

MEMORY_AND_DISK

MEMORY_AND_DISK_SER

DISK_ONLY

DISK_ONLY_2 #_2把RDD持久化为两份副本

程序:

package thisisnobody.basic

import org.apache.spark.storage.StorageLevel
import org.apache.spark.{SparkConf, SparkContext}


object test {
  def main(args: Array[String]): Unit = {

    val conf = new SparkConf().setAppName("filter").setMaster("local")
    val sc = new SparkContext(conf)
    val rdd = sc.parallelize(List(1,2,3,4))
    val rdd1 = rdd.filter( x => x != 3)
    rdd1.persist(StorageLevel.MEMORY_ONLY)
    rdd1.foreach(println)

  }
}

> 虽然在行动操作之前调用了persist(),但persist()并没有强制求值,转化操作还是行动操作按需执行

> 使用unpersist()手动把持久化RDD从缓存中删除



猜你喜欢

转载自blog.csdn.net/weixin_42129080/article/details/80885259