代码之家  ›  专栏  ›  技术社区  ›  Go Erlangen

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

  •  2
  • Go Erlangen  · 技术社区  · 6 年前

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

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

    2. 但是 很少有以前保存的数据帧。我们猜测的解决办法是

      spark.catalog.clearCache()
      

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

    那么,问题是什么 正确的 怎么了?

    0 回复  |  直到 6 年前