Spark核心编程-RDD控制操作

本文介绍Spark中RDD的持久化策略及检查点机制,包括不同存储级别的特性对比,以及如何通过checkpoint操作优化血统长的RDD计算过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spark可以将RDD持久化到内存或者磁盘,持久化到内存可以极大的提高迭代计算以及计算模型之间的数据共享,一般情况下,执行节点60%内存用于缓存数据,剩下40%用于运行任务。Spark使用persist、cache进行操作持久化,其中cache是persist的特例。

  • cache():RDD[T]
  • persist():RDD[T]
  • persist(level:StorageLevel):RDD[T]
Persist可以指定StorageLevel,当StorageLevel为MEMORY_ONLY的时候就是cache。具体存储类型如下:
val NONE = new StorageLevel(false, false, false, false)
val DISK_ONLY= new StorageLevel(true, false, false, false)
val DISK_ONLY_2= new StorageLevel(true, false, false, false, 2)
val MEMORY_ONLY= new StorageLevel(false, true, false, true)
val MEMORY_ONLY_2= new StorageLevel(false, true, false, true, 2)
val MEMORY_ONLY_SER= new StorageLevel(false, true, false, false)
val MEMORY_ONLY_SER_2= new StorageLevel(false, true, false, false, 2)
val MEMORY_AND_DISK= new StorageLevel(true, true, false, true)
val MEMORY_AND_DISK_2= new StorageLevel(true, true, false, true, 2)
val MEMORY_AND_DISK_SER= new StorageLevel(true, true, false, false)
val MEMORY_AND_DISK_SER_2= new StorageLevel(true, true, false, false, 2)
val OFF_HEAP = new StorageLevel(true, true, true, false, 1)

在Spark中可以使用checkpoint操作设置检查点,相对持久化persist而言,checkpoint将切断与该RDD的之前的依赖关系。设置检查点对包含依赖关系的长血统RDD是非常有用的,可以避免占用过多的系统资源和节点失败情况下重新计算成本过高的问题。

val rdd = sc.makeRDD(1 to 4,1)
val flatMapRDD = rdd.flatMap(x => Seq(x,x))
// 设置检查点HDFS存储位置
sc.setCheckpointDir("hdfs://hadoop:8020/user/hadoop/checkpoint/")
// 使用checkpoint设置检查点,属于懒加载
flatMapRDD.checkpoint()
// 在遇到行动操作的时候,进行检查点操作,检查点前为ParallelCollectionRDD[0],而检查点后为ParallelCollectionRDD[1]
flatMapRDD.dependencies.head.rdd
flatMapRDD.collect
flatMapRDD.dependencies.head.rdd
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值