Смущен, почему кэшированные DF (в частности, 1-й) показывают разные Storage Levels
здесь в интерфейсе Spark, основанные на фрагментах кода
print(spark.version)
2.4.3
# id 3 => using default storage level for df (memory_and_disk) and unsure why storage level is not serialized since i am using pyspark
df = spark.range(10)
print(type(df))
df.cache().count()
print(df.storageLevel)
# id 15 => using default storage level for rdd (memory_only) and makes sense why it is serialized
rdd = df.rdd
print(type(rdd))
rdd.cache().collect()
# id 19 => manually configuring to (memory_and_disk) which makes the storage level serialized
df2 = spark.range(100)
from pyspark import StorageLevel
print(type(df2))
df2.persist(StorageLevel.MEMORY_AND_DISK).count()
print(df2.storageLevel)
<class 'pyspark.sql.dataframe.DataFrame'>
Disk Memory Deserialized 1x Replicated
<class 'pyspark.rdd.RDD'>
<class 'pyspark.sql.dataframe.DataFrame'>
Disk Memory Serialized 1x Replicated
Согласно сохраненной документации Spark python
объекты всегда serialized
, так почему первый df
показывает deserialized
?
https://spark.apache.org/docs/latest/rdd-programming-guide.html#which-storage-level-to-choose
Примечание. В Python сохраненные объекты всегда будут сериализованы с помощью библиотеки Pickle, поэтому не имеет значения, выбираете ли вы сериализованный уровень. Доступные уровни хранения в Python включают MEMORY_ONLY, MEMORY_ONLY_2, MEMORY_AND_DISK, MEMORY_AND_DISK_2, DISK_ONLY и DISK_ONLY_2.
По умолчанию хранилище для rdd
равно MEMORY_ONLY
, а для df
оно равно MEMORY_AND_DISK
, поэтому разве пользовательский интерфейс Spark не должен отображать serialized
для всех pyspark
кэшированных фреймов данных?