SparkRDD三种数据持久化/数据重用(persist cache checkpoint)

一般情况下,RDD的计算过程是不会保留数据的。所以在重复使用RDD对象时,并不会重用数据,而是又重新计算了一遍,浪费资源、时间。为了实现数据的重用,避免重复计算,需要进行持久化操作当然,对于某些大数据量、计算时间过长的操作来说,因为有可能出现计算错误而导致从源头开始又计算一遍的情况,所以也需要进行数据持久化操作。persist()persist()会把数据临时缓存在内存、磁盘当中(可手动指定)。若涉及到磁盘IO,则性能会受到影响。但保存在磁盘时数据也会较为安全。如果只保存在内存当中(StorageL
摘要由CSDN通过智能技术生成

一般情况下,RDD的计算过程是不会保留数据的。所以在重复使用RDD对象时,并不会重用数据,而是又重新计算了一遍,浪费资源、时间。
为了实现数据的重用,避免重复计算,需要进行持久化操作
当然,对于某些大数据量、计算时间过长的操作来说,因为有可能出现计算错误而导致从源头开始又计算一遍的情况,所以也需要进行数据持久化操作。

persist()

persist()会把数据临时缓存在内存、磁盘当中(可手动指定)。若涉及到磁盘IO,则性能会受到影响。但保存在磁盘时数据也会较为安全。如果只保存在内存当中(StorageLevel.MEMORY_ONLY),那么当内存较满时会放不下缓存文件,则缓存文件会被直接丢弃。由于是临时存储的缓存文件,不论是保存在内存中还是磁盘中,在作业执行完毕后就会被清除。

代码样例:

val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("NoPersist")
val sc = new SparkContext(sparkConf)

val rdd: RDD[String] = sc.makeRDD(List("hello world", "hello spark"))
val flatMap: RDD[String] = rdd.flatMap(_.split(" "))
val mapRDD: RDD[(String, Int)] = flatMap.map(
	word => {
   
		println("string => (String, Int)")
		(word, 1)
	}
)
// 数据持久化 便于数据重用
//		mapRDD.cache()
mapRDD.persist(StorageLevel.MEMORY_AND_DISK)

println(mapRDD.toDebugString
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值