Apache spark spark 2.4.4洗牌数据似乎未清理

Apache spark spark 2.4.4洗牌数据似乎未清理,apache-spark,pyspark,shuffle,Apache Spark,Pyspark,Shuffle,我有一个关于spark shuffle数据的问题。我正在使用spark 2.4.4并监视我的spark磁盘使用情况。我注意到由于某种原因,磁盘空间从未被释放。我缓存了我的数据并取消持久化了我不需要的数据帧(基于:)。但这没用 我的问题是,如果我有以下代码 # step1: load data df_a = spark.read.csv(PAHT_TO_A, schema=schema).repartition('uid').select('uid', 'value').cache() # s

我有一个关于spark shuffle数据的问题。我正在使用spark 2.4.4并监视我的spark磁盘使用情况。我注意到由于某种原因,磁盘空间从未被释放。我缓存了我的数据并取消持久化了我不需要的数据帧(基于:)。但这没用

我的问题是,如果我有以下代码

# step1: load data

df_a = spark.read.csv(PAHT_TO_A, schema=schema).repartition('uid').select('uid', 'value').cache()

# step2: aggregate the data

df_b = df_a.select('uid', 'value').reduceByKey(lambda x, y: x + y).toDF(['uid', 'aggregated_values']).repartition('uid').cache()

print('size of df_b: %d' % df_b.count())

# step3: remove dataframe a

df_a.unpersist()

# step4 .....

我的理解是,在步骤2中创建的无序数据应该在步骤3之后由gc删除。我应该去看电影 磁盘空间无法释放

然而,在我的应用程序中,我需要在不同的数据集上进行许多聚合。因此,我的磁盘空间一直在减少,直到在后面的步骤中收到磁盘空间错误消息

对我来说,唯一有效的方法就是将step1、step2和step3放到单个应用程序中,并将dfu b保存回s3。一旦此应用程序 完成后,将释放磁盘空间。然后我创建另一个应用程序来再次加载df_b

这个代码有什么问题吗?或者有什么我可以优化的

非常感谢

更新1

好吧,我的错。看来我糊涂了。我相信我需要这样做

df_b.unpersist()

要删除洗牌数据

upersist
->
unpersist
thx,这是一个打字错误。已根据spark文档修复,请注意此方法在默认情况下不会阻塞。要阻止直到释放资源,请在调用此方法时指定blocking=true。是否?我们能用它做什么呢?
upersist
->
unpersist
thx,这是个打字错误。已根据spark文档修复,请注意此方法在默认情况下不会阻塞。要阻止直到释放资源,请在调用此方法时指定blocking=true。是否?我们能用它做什么?