在我们的Pypark应用程序中,我们在非常大的数据帧(数十亿个数据点)上运行迭代算法,并且需要大量的persist()。自动内存清理似乎对我们不起作用(首先清除错误的数据),因此我们尝试手动取消某些中间数据帧的持久性()。请回答以下两个问题:
-
我们如何知道某个特定的中间数据帧在什么时候可以不持久化?例如,假设有一个先前持久化的数据帧df1,我从中获得另一个数据帧df2(或者通过join()从它和其他东西)。调用df2.persist()后取消持久化df1安全吗?如果不是(我怀疑是这样),可以使用方法toDF()或createDataFrame()来创建这样的解耦吗?
-
但是
很少有以前保存的数据帧。我们猜测的解决办法是
spark.catalog.clearCache()
然后立即在数据帧上添加new persist(),我们希望将其保存在内存中,但这只是一个猜测,对此我没有任何确凿的理由。
那么,问题是什么
正确的
怎么了?