day06-Spark核心
一、缓存和checkpoint机制(熟悉)
rdd 的优化手段,可以提升计算速度。将计算过程中某个rdd保存在缓存或者hdfs上,在后面计算时,使用该rdd可以直接从缓存或者hdfs上直接读取数据
1-1 缓存使用
1、提升计算速度 2、容错
什么样的rdd需要缓存?
1、rdd的计算时间比较长,获取数据的计算比较复杂
2、rdd被频繁使用
- 缓存级别
- 指定缓存数据存储的位置
StorageLevel.DISK_ONLY # 将数据缓存到磁盘上
StorageLevel.DISK_ONLY_2 # 将数据缓存到磁盘上 保存两份
StorageLevel.DISK_ONLY_3 # 将数据缓存到磁盘上 保存三份
StorageLevel.MEMORY_ONLY # 将数据缓存到内存 默认
StorageLevel.MEMORY_ONLY_2 # 将数据缓存到内存 保存两份
StorageLevel.MEMORY_AND_DISK # 将数据缓存到内存和磁盘 优先将数据缓存到内存上,内存不足可以缓存到磁盘
StorageLevel.MEMORY_AND_DISK_2 = # 将数据缓存到内存和磁盘
StorageLevel.OFF_HEAP # 不使用
StorageLevel.MEMORY_AND_DISK_ESER # 将数据缓存到内存和磁盘 序列化操作,按照二进制存储,节省空间
- 使用
from pyspark import SparkContext
from pyspark.storagelevel import StorageLevel
sc = SparkContext()
rdd = sc.parallelize([1,2,3,4,5,6])
# 数据过滤
rdd_filter= rdd.filter(lambda x:x%2==0)
# rdd数据进行缓存
# storageLevel=StorageLevel.MEMORY_ONLY 指定缓存界别 默认MEMORY_ONLY
rdd_filter.persist(storageLevel=StorageLevel.MEMORY_ONLY_2)
# 触发数据进行缓存 使用action算子
rdd_filter.collect() # 缓存所有数据
# 数据都加一
rdd_map1 = rdd_filter.map(lambda x:x+1)
# 数据乘以2
rdd_map2 = rdd_filter.map(lambda x:x*1)
# 释放缓存 手动释放缓存
# 当代码程序执行完成后自动释放缓存
rdd_filter.unpersist()