Кешування

Вступ до Spark SQL у Python

Mark Plutowski

Data Scientist

Що таке кешування?

  • Зберігання даних у пам'яті
  • Spark схильний агресивно вивантажувати пам'ять
Вступ до Spark SQL у Python

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

  • Least Recently Used (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...