Pyspark学习笔记(四)弹性分布式数据集 RDD 综述(下)

本文深入探讨PySpark中RDD的持久化机制,如何通过cache()和persist()优化计算效率,以及各种存储级别的选择,包括MEMORY_ONLY、MEMORY_AND_DISK等。此外,还介绍了广播变量和累加器这两种共享变量的使用场景。

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

在这里插入图片描述


前言

本篇主要讲述了如何在执行pyspark任务时候缓存或者共享变量,以达到节约资源、计算量、时间等目的

一、PySpark RDD 持久化

参考文献:https://sparkbyexamples.com/pyspark-rdd#rdd-persistence

    我们在上一篇博客提到,RDD 的转化操作是惰性的,要等到后面执行行动操作的时候,才会真正执行计算;
    那么如果我们的流程图中有多个分支,比如某一个转换操作 X 的中间结果,被后续的多个并列的流程图(a,b,c)运用,那么就会出现这么一个情况:
    在执行后续的(a,b,c)不同流程的时候,遇到行动操作时,会重新从头计算整个图,即该转换操作X,会被重复调度执行:(X->a), (X->b), (X->c); 如此一来就会浪费时间和计算资源,则RDD的持久化就显得十分有用了。
    PySpark 通过使用 cache() persist() 提供了一种优化机制,来存储 RDD 的中间计算,以便它们可以在后续操作中重用。当持久化或缓存一个 RDD 时,每个工作节点将它的分区数据存储在内存或磁盘中,并在该 RDD 的其他操作中重用它们。Spark 在节点上的持久数据是容错的,这意味着如果任何分区丢失,它将使用创建它的原始转换自动重新计算

cache()

    默认将 RDD 计算保存到存储级别 MEMORY_ONLY ,这意味着它将数据作为未序列化对象存储在 JVM 堆中
(对于Spark DataFrame 或 Dataset 缓存将其保存到存储级别 ` MEMORY_AND_DISK’)

cachedRdd = rdd.cache()

persist()

有两种函数签名
第一个签名不接受任何参数,默认情况下将其保存到MEMORY_AND_DISK存储级别,
例:

dfPersist = df.persist()

第二个签名StorageLevel作为参数将其存储到不同的存储级别;
例:

dfPersist = df
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值