Pyspark:需要了解pyspark中缓存的行为

Posted

技术标签:

【中文标题】Pyspark:需要了解pyspark中缓存的行为【英文标题】:Pyspark:Need to understand the behaviour of cache in pyspark 【发布时间】:2020-09-27 18:53:02 【问题描述】:

我想了解pyspark中缓存的行为

    df.cache()df = df.cache() 有什么不同吗?

    是否绝对有必要在程序执行结束时取消持久化缓存的数据帧,我理解基于(最近最少使用的机制)的火花清除它,如果我不取消持久化数据帧可能会产生负面影响,我可以想到内存不足的问题但需要输入

    有没有可能当我使用df = df.cache()时,程序的重新执行使用旧的缓存数据,而不是重新计算和覆盖缓存的数据帧?

【问题讨论】:

这能回答你的问题吗? cache a dataframe in pyspark 非常感谢@Steven,它清除了我的大部分概念,您能否也对第 2 点进行一些说明,我对 unpersist 的使用有点困惑。我缓存了一些数据帧和如果我在程序执行结束时不取消它们并重新运行程序,旧的缓存数据帧会被覆盖并存储在相同的内存空间还是会占用新的内存空间(考虑到它不是基于 LRU 推出的) .并且spark是否有可能在程序重新执行时根本不计算数据帧,因为它已经可以在缓存内存中找到它。 【参考方案1】:

最后不需要不坚持。停止 spark 将清除缓存的数据帧。 您不能从一个 spark 执行持续到另一个 spark 执行。如果您想从一个 Spark “持久化”到另一个 Spark,唯一的解决方案是物理保存您的数据(写入)并在下次执行时再次读取它们。

【讨论】:

以上是关于Pyspark:需要了解pyspark中缓存的行为的主要内容,如果未能解决你的问题,请参考以下文章

PySpark|比RDD更快的DataFrame

Pyspark Struct 列:爆炸后的奇怪行为

重用pyspark缓存并在for循环中不持久

pyspark 诱人的行为

PySpark 2: KMeans 输入数据不直接缓存

pyspark:在同一列(使用数组)上使用多个 UDF 函数时出现意外行为