Spark的缓存Cache

Spark缓存机制详解
本文详细介绍了如何在Spark中使用缓存机制来提高数据处理效率。通过实例演示了从启动spark-shell,读取HDFS上的文件,将数据集缓存到内存,并触发action操作的全过程。同时,对比了缓存前后job的执行时长,展示了缓存机制在大数据处理中的应用与优势。

1、启动spark-shell

./spark-shell --master spark://hdp-1:7077 --executor-memory 500m --total-executor-cores 1

2、读文件

var lines = sc.textFile("hdfs://hdp-1:9000/aaa.txt")

3、将读到的文件放入缓存

var cached = lines.cache

4、出发action

cached.count
lines.count

5、观察spark的job执行时长
在这里插入图片描述
6、缓存应用扩展

 cached.filter(_.contains("lucas")).count
### Spark 缓存的适用场景及应用案例 #### 适用场景 Spark缓存适用于那些需要反复读取的数据集,尤其是当这些数据集在多个操作之间共享时。通过将中间计算结果存储在内存中,可以显著减少重复计算的时间开销[^2]。 对于迭代算法而言,如机器学习中的梯度下降法,在每次迭代过程中都需要访问相同的数据源;此时利用缓存功能能够有效提升性能。另外,在涉及宽依赖的操作链路里(比如连接不同分区的数据),合理设置缓存同样有助于优化整体作业效率[^3]。 #### 应用案例 ##### 场景一:机器学习模型训练 假设有一个大规模的日志文件用于构建推荐系统模型。在这个过程中,特征提取阶段会频繁扫描原始日志记录来生成样本向量。如果不采取任何措施,默认情况下每一次调用action都会触发完整的转换流水线重新执行一次,这无疑浪费了大量的资源。因此可以在完成初步预处理之后立即对得到的结果进行cache()或persist(StorageLevel.MEMORY_ONLY),从而使得后续多次使用的同一份数据可以直接从内存加载而不是每次都重头再来[^1]。 ```python from pyspark import SparkContext, StorageLevel sc = SparkContext() # 加载并预处理数据 raw_logs = sc.textFile("hdfs://path/to/logs") processed_data = raw_logs.map(lambda line: process_line(line)) # 将处理后的数据缓存在内存中 processed_data.persist(StorageLevel.MEMORY_ONLY) # 开始训练过程... for iteration in range(num_iterations): model.train(processed_data) ``` ##### 场景二:ETL 数据管道 在一个典型的企业级 ETL 流程中,通常会有多个下游任务依赖于同一个上游输入表。如果不对该公共前置步骤做特殊处理,则意味着每当有新的需求加入进来就要再次经历一遍冗长而耗时的过程。借助于Spark 的持久化特性就可以很好地解决这个问题——只要第一次成功获取到目标表格后就立即将其保存下来供其他环节随时调阅即可。 ```sql -- SQL风格的例子展示如何在SQL查询语句里面使用CACHE TABLE命令实现同样的目的 CREATE OR REPLACE TEMP VIEW cleaned_sales AS ( SELECT * FROM sales WHERE status='completed' ); -- 对视图进行缓存 CACHE TABLE cleaned_sales; -- 后续的各种分析都可以基于已经准备好的cleaned_sales来进行 SELECT COUNT(*) FROM cleaned_sales; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值