キャッシュ

Pythonで学ぶ Spark SQL 入門

Mark Plutowski

Data Scientist

キャッシュとは?

  • データをメモリに保持
  • Spark はメモリを積極的に解放しがち
Pythonで学ぶ Spark SQL 入門

エビクション方針

  • 最も最近使われていないもの(LRU)
  • 退避は各ワーカーで独立に発生
  • 各ワーカーの利用可能メモリに依存
Pythonで学ぶ Spark SQL 入門

データフレームのキャッシュ

データフレームをキャッシュ:
df.cache()
解除するには:
df.unpersist()
Pythonで学ぶ Spark SQL 入門

データフレームがキャッシュ済みかの確認

df.is_cached
False
df.cache()
df.is_cached
True
Pythonで学ぶ Spark SQL 入門

データフレームのキャッシュ解除

df.unpersist()
df.is_cached()
False
Pythonで学ぶ Spark SQL 入門

ストレージレベル

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
Pythonで学ぶ Spark SQL 入門

データフレームの永続化

Spark 2.1以降では以下は同等です:

  • df.persist()

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

  • df.cache()df.persist() と同じ

Pythonで学ぶ Spark SQL 入門

テーブルのキャッシュ

df.createOrReplaceTempView('df')
spark.catalog.isCached(tableName='df')
False
spark.catalog.cacheTable('df')
spark.catalog.isCached(tableName='df')
True
Pythonで学ぶ Spark SQL 入門

テーブルのキャッシュ解除

spark.catalog.uncacheTable('df')
spark.catalog.isCached(tableName='df')
False
spark.catalog.clearCache()
Pythonで学ぶ Spark SQL 入門

ヒント

  • キャッシュは遅延評価
  • 複数回操作する場合のみキャッシュする
  • 不要になったら unpersist する
  • 選択的にキャッシュする
Pythonで学ぶ Spark SQL 入門

練習しましょう

Pythonで学ぶ Spark SQL 入門

Preparing Video For Download...