Buforowanie

Wprowadzenie do Spark SQL w Pythonie

Mark Plutowski

Data Scientist

Czym jest buforowanie?

  • Przechowywanie danych w pamięci
  • Spark agresywnie zwalnia pamięć
Wprowadzenie do Spark SQL w Pythonie

Polityka eksmisji

  • Najrzadziej używany (LRU)
  • Eksmisja odbywa się niezależnie na każdym węźle roboczym
  • Zależy od pamięci dostępnej dla każdego węzła
Wprowadzenie do Spark SQL w Pythonie

Buforowanie ramki danych

Aby buforować ramkę danych:
df.cache()
Aby usunąć bufor:
df.unpersist()
Wprowadzenie do Spark SQL w Pythonie

Sprawdzanie, czy ramka danych jest buforowana

df.is_cached
False
df.cache()
df.is_cached
True
Wprowadzenie do Spark SQL w Pythonie

Usuwanie bufora ramki danych

df.unpersist()
df.is_cached()
False
Wprowadzenie do Spark SQL w Pythonie

Poziom magazynowania

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

Powyższy poziom magazynowania oznacza:

  1. useDisk = True
  2. useMemory = True
  3. useOffHeap = False
  4. deserialized = True
  5. replication = 1
Wprowadzenie do Spark SQL w Pythonie

Utrwalanie ramki danych

Poniższe polecenia są równoważne w Spark 2.1+:

  • df.persist()

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

  • df.cache() jest równoważne df.persist()

Wprowadzenie do Spark SQL w Pythonie

Buforowanie tabeli

df.createOrReplaceTempView('df')
spark.catalog.isCached(tableName='df')
False
spark.catalog.cacheTable('df')
spark.catalog.isCached(tableName='df')
True
Wprowadzenie do Spark SQL w Pythonie

Usuwanie bufora tabeli

spark.catalog.uncacheTable('df')
spark.catalog.isCached(tableName='df')
False
spark.catalog.clearCache()
Wprowadzenie do Spark SQL w Pythonie

Wskazówki

  • Buforowanie jest leniwe
  • Buforować należy tylko wtedy, gdy planowane jest więcej niż jedna operacja
  • Odbuforować obiekt, gdy nie jest już potrzebny
  • Buforować selektywnie
Wprowadzenie do Spark SQL w Pythonie

Czas na ćwiczenia!

Wprowadzenie do Spark SQL w Pythonie

Preparing Video For Download...