Когда и как явно отказаться от использования промежуточных фреймов данных - PullRequest
0 голосов
/ 30 октября 2018

В наших приложениях Pyspark мы запускаем итеративные алгоритмы на очень больших фреймах данных (многие миллиарды точек данных), и нам нужно много работать с persist (). Автоматическая очистка памяти, похоже, не работает для нас (сначала удаляются неправильные данные), поэтому мы пытаемся вручную unpersist () определенных промежуточных кадров данных. Буду признателен за ответы на следующие два вопроса:

  1. Как мы узнаем, в какой момент конкретный промежуточный фрейм данных может остаться без ответа? Например, скажем, есть один ранее сохраненный фрейм данных df1, и я получаю другой фрейм данных df2 из него (или из него, а также что-то еще через join ()). Будет ли безопасно отменять вызов df1 после вызова df2.persist ()? Если нет (что, я подозреваю, имеет место), могут ли методы toDF () или createDataFrame () использоваться для создания такого разделения?

  2. Иногда нам хотелось бы освободить память всех , но нескольких ранее сохраненных фреймов данных. Наше угаданное решение - позвонить

    spark.catalog.clearCache()
    

    и сразу же следуйте за ним с помощью новой функции persist () на тех кадрах данных, которые мы хотели бы сохранить в памяти, но это всего лишь предположение, и у меня нет для этого веских оснований.

Итак, каков правильный путь?

Заранее спасибо

...