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

时间:2018-10-30 03:29:46

标签: dataframe pyspark persist

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

  1. 我们如何知道某个中间数据帧在什么时候可以不持久?例如,假设有一个先前持久化的数据帧df1,我从中(或从它以及其他通过join()获得的数据帧)获得了另一个数据帧df2。在调用df2.persist()之后对df1进行持久化是否安全?如果没有(我怀疑是这种情况),可以使用toDF()或createDataFrame()方法来创建这种解耦吗?

  2. 有时,我们希望释放所有个以前持久保存的数据帧的内存。我们猜测的解决方案是致电

    spark.catalog.clearCache()
    

    ,然后在我们要保留在内存中的数据帧上紧跟其后的是新的persist(),但这只是一个猜测,我对此没有任何正当理由。

那么,正确的方式是什么?

预先感谢

0 个答案:

没有答案