Mise en cache

Introduction à Spark SQL en Python

Mark Plutowski

Data Scientist

Qu'est-ce que la mise en cache ?

  • Garder les données en mémoire
  • Spark libère souvent la mémoire de façon agressive
Introduction à Spark SQL en Python

Politique d'éviction

  • Least Recently Used (LRU)
  • L'éviction se fait séparément sur chaque nœud
  • Dépend de la mémoire disponible sur chaque nœud
Introduction à Spark SQL en Python

Mise en cache d'un dataframe

Pour mettre en cache un dataframe :
df.cache()
Pour le retirer du cache :
df.unpersist()
Introduction à Spark SQL en Python

Savoir si un dataframe est en cache

df.is_cached
False
df.cache()
df.is_cached
True
Introduction à Spark SQL en Python

Retirer un dataframe du cache

df.unpersist()
df.is_cached()
False
Introduction à Spark SQL en Python

Niveau d'entreposage

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

Au niveau d'entreposage ci-dessus :

  1. useDisk = True
  2. useMemory = True
  3. useOffHeap = False
  4. deserialized = True
  5. replication = 1
Introduction à Spark SQL en Python

Persistance d'un dataframe

Ce qui suit est équivalent dans Spark 2.1+ :

  • df.persist()

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

  • df.cache() équivaut à df.persist()

Introduction à Spark SQL en Python

Mettre une table en cache

df.createOrReplaceTempView('df')
spark.catalog.isCached(tableName='df')
False
spark.catalog.cacheTable('df')
spark.catalog.isCached(tableName='df')
True
Introduction à Spark SQL en Python

Retirer une table du cache

spark.catalog.uncacheTable('df')
spark.catalog.isCached(tableName='df')
False
spark.catalog.clearCache()
Introduction à Spark SQL en Python

Conseils

  • La mise en cache est paresseuse
  • Ne mettez en cache que si vous effectuez plus d'une opération
  • Utilisez unpersist quand l'objet n'est plus requis
  • Mettez en cache de façon sélective
Introduction à Spark SQL en Python

Passons à la pratique !

Introduction à Spark SQL en Python

Preparing Video For Download...