Dataframe 何时以及如何显式取消持久化中间数据帧

Dataframe 何时以及如何显式取消持久化中间数据帧,dataframe,pyspark,persist,Dataframe,Pyspark,Persist,在Pyspark应用程序中,我们在非常大的数据帧(数十亿个数据点)上运行迭代算法,并且需要大量的persist()。自动内存清理似乎对我们不起作用(首先清除错误的数据),因此我们试图手动取消某些中间数据帧的持久性。请回答以下两个问题: 我们如何知道一个特定的中间数据帧在什么时候可以被取消持久化?例如,假设有一个先前持久化的数据帧df1,我从中获得另一个数据帧df2(或者通过join()从它和其他东西)。调用df2.persist()后取消持久化df1安全吗?如果不是(我怀疑是这样),可以使用方法

在Pyspark应用程序中,我们在非常大的数据帧(数十亿个数据点)上运行迭代算法,并且需要大量的persist()。自动内存清理似乎对我们不起作用(首先清除错误的数据),因此我们试图手动取消某些中间数据帧的持久性。请回答以下两个问题:

  • 我们如何知道一个特定的中间数据帧在什么时候可以被取消持久化?例如,假设有一个先前持久化的数据帧df1,我从中获得另一个数据帧df2(或者通过join()从它和其他东西)。调用df2.persist()后取消持久化df1安全吗?如果不是(我怀疑是这样),可以使用方法toDF()或createDataFrame()来创建这种解耦吗

  • 有时,我们希望释放所有以前保存的数据帧的内存,但很少。我们猜测的解决办法是打电话

    spark.catalog.clearCache()
    
    然后在数据帧上立即添加新的persist(),我们希望将其保存在内存中,但这只是一个猜测,对此我没有任何确凿的理由

  • 那么,正确的方法是什么

    提前谢谢