取消parentDF对持久化和计算化childDF的影响

问题描述 投票:0回答:1

作为Pyspark的一部分 - 取消持久化父数据帧也会从缓存中删除子数据帧,提到如果我们取消保留parentDF,那么所有childDF也将被取消持久化。

我正在观察当地不同的 unpersist 行为。 如果我取消保留parentDF,那么childDF仍然会被缓存。

1.  val inputPath = "C:\\code\\Test\\SparkTest\\weather.parquet"
2.  val parentDF = sparkSession.read.parquet(inputPath).persist()
3.  parentDF.show(false)      // At this point parentDF will be computed and persisted
4.  val childDF = parentDF.filter("RainTomorrow == 'Yes'").persist()
5.  childDF.show(false)       // At this point childDF will be computed and persisted
6.  parentDF.unpersist()      // Unpersisting the parentDF
7.  val grandChildDF = childDF.filter("RainToday == 'Yes'")
8.  grandChildDF.show(false)  // At this point, in yarn-ui, childDF is still there in https://i.sstatic.net/269tsfXM.png
apache-spark-sql
1个回答
0
投票

重点是,级联不持久仅在您的子数据帧未单独缓存时发生在 Spark 中,

我看得出你做到了

val childDF = parentDF.filter("RainTomorrow == 'Yes'").persist()

现在的问题是数据帧何时发生持久化?

  • 如果您显式调用 .persistence() ,则 childDF 将持久保存在单独的内存块中,并且即使您取消parentDF 的持久化也不会取消持久化

在此输入图片描述

© www.soinside.com 2019 - 2024. All rights reserved.