Назовите Spark DataFrames в кеше и укажите StorageLevel для кэшированных таблиц в каталоге - PullRequest
0 голосов
/ 13 июня 2019

Как бы я назвал 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...