Как бы я назвал Spark DataFrame (df
), который помещается в кеш, с помощью df.persist()
?
ИЛИ
Как бы я указал StorageLevel
из df
поместить в кеш с помощью spark.catalog.cacheTable ("df")?
Кэширование df
с:
df.persist(StorageLevel.DISK_ONLY)
df.count()
называет DataFrame в кеше как текствесь физический план, как можно увидеть с df.explain()
.Тем не менее, я могу указать StorageLevel
.
, тогда как с:
df.createOrReplaceTempView("df")
spark.catalog.cacheTable("df")
df.count()
имя DataFrame в кэше просто "In-memory table df",что гораздо проще определить в пользовательском интерфейсе Spark или в списке [s.name() for s in sc._jsc.sc().getRDDStorageInfo()]
.( При необходимости, df
можно назвать с помощью df_rdd_id = "df_{}".format(df.rdd.id())
и создать представление и кэшировать таблицу с этим. ) Однако, я не могу указать StorageLevel
.
Я попытался смешать два, но ни одно из следующего не сделало то, что я хотел.
Следующие имена df
с Физическим Планом, но получают StorageLevel
правильный.
df.createOrReplaceTempView("df")
df.persist(StorageLevel.DISK_ONLY)
df.count()
Следующее имя df как 'df', но неверный уровень StorageLevel.
df.createOrReplaceTempView("df")
df.persist(StorageLevel.DISK_ONLY)
spark.catalog.cacheTable("df")
Обратите внимание, что любой метод удаления df
из кэша работает,независимо от метода, используемого для помещения df
в кеш.
например, df
, кэшированный с:
df.persist(StorageLevel.DISK_ONLY)
df.count()
, может быть удален из кэша с помощью:
df.createOrReplaceTempView("df")
spark.catalog.uncacheTable("df")
Аналогично, df
, кэшированный с:
df.createOrReplaceTempView("df")
spark.catalog.cacheTable("df")
можно удалить из кэша с помощью:
df.unpersist()
Также обратите внимание, что в pySpark для констант persist()
StorageLevel
: «все константы используют сериализованные форматы"( pySpark 2.2.0 Docs ).Я подтвердил это, установив для StorageLevel
значение DISK_ONLY
, MEMORY_ONLY
или MEMORY_AND_DISK
;а «Уровень хранения» на вкладке «Хранение» в интерфейсе Spark всегда сообщает «Сериализованная 1x реплицированная».
Принимая во внимание, что spark.catalog.cacheTable
кэширует данные в «Десериализованная 1x реплицированная», что также можно проверить винтерфейс Spark.