Кэширование

Введение в Spark SQL на Python

Mark Plutowski

Data Scientist

Что такое кэширование?

  • Хранение данных в памяти
  • Spark активно освобождает память
Введение в Spark SQL на Python

Политика вытеснения

  • Вытеснение последнего использованного (LRU)
  • Вытеснение происходит независимо на каждом узле
  • Зависит от доступной памяти каждого узла
Введение в Spark SQL на Python

Кэширование датафрейма

Кэширование датафрейма:
df.cache()
Отмена кэширования:
df.unpersist()
Введение в Spark SQL на Python

Проверка кэширования датафрейма

df.is_cached
False
df.cache()
df.is_cached
True
Введение в Spark SQL на Python

Отмена кэширования датафрейма

df.unpersist()
df.is_cached()
False
Введение в Spark SQL на Python

Уровень хранения

df.unpersist()
df.cache()
df.storageLevel
StorageLevel(True, True, False, True, 1)

Для указанного уровня хранения верно следующее:

  1. useDisk = True
  2. useMemory = True
  3. useOffHeap = False
  4. deserialized = True
  5. replication = 1
Введение в Spark SQL на Python

Сохранение датафрейма

В Spark 2.1+ следующие вызовы эквивалентны:

  • df.persist()

  • df.persist(storageLevel=pyspark.StorageLevel.MEMORY_AND_DISK)

  • df.cache() эквивалентно df.persist()

Введение в Spark SQL на Python

Кэширование таблицы

df.createOrReplaceTempView('df')
spark.catalog.isCached(tableName='df')
False
spark.catalog.cacheTable('df')
spark.catalog.isCached(tableName='df')
True
Введение в Spark SQL на Python

Отмена кэширования таблицы

spark.catalog.uncacheTable('df')
spark.catalog.isCached(tableName='df')
False
spark.catalog.clearCache()
Введение в Spark SQL на Python

Советы

  • Кэширование выполняется лениво
  • Кэшируйте только при выполнении более одной операции
  • Удаляйте кэш, когда объект больше не нужен
  • Кэшируйте избирательно
Введение в Spark SQL на Python

Давайте потренируемся!

Введение в Spark SQL на Python

Preparing Video For Download...