缓存

Python 中的 Spark SQL 入门

Mark Plutowski

Data Scientist

什么是缓存?

  • 将数据保存在内存中
  • Spark 往往会积极释放内存
Python 中的 Spark SQL 入门

淘汰策略

  • 最近最少使用(LRU)
  • 各个 worker 独立执行淘汰
  • 取决于每个 worker 的可用内存
Python 中的 Spark SQL 入门

缓存 DataFrame

缓存 DataFrame:
df.cache()
取消缓存:
df.unpersist()
Python 中的 Spark SQL 入门

判断 DataFrame 是否已缓存

df.is_cached
False
df.cache()
df.is_cached
True
Python 中的 Spark SQL 入门

取消缓存 DataFrame

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 入门

持久化 DataFrame

在 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 入门

提示

  • 缓存是惰性的
  • 仅在将执行多次操作时缓存
  • 不再需要对象时取消持久化
  • 有选择地缓存
Python 中的 Spark SQL 入门

Passons à la pratique !

Python 中的 Spark SQL 入门

Preparing Video For Download...