Apache spark spark UI中的存储选项卡将序列化内存值显示为;“内存中的大小”;对于远小于磁盘上原始数据大小的缓存RDD

Apache spark spark UI中的存储选项卡将序列化内存值显示为;“内存中的大小”;对于远小于磁盘上原始数据大小的缓存RDD,apache-spark,pyspark,Apache Spark,Pyspark,我只是试图理解缓存(或持久化)数据帧或rdd时的内存使用概念。我知道spark.memory.storageFraction决定了只能作为内存持久化的数据的大小限制。而且我还了解到,默认情况下,数据帧上的.cache()使用StorageLevel.MEMORY\u和磁盘调用persist(),而在rdd上,.cache()使用StorageLevel.MEMORY\u调用persist()。现在,在下面的代码片段中,我正在使用rdd textFile API从HDFS读取一个693 MB的文本

我只是试图理解缓存(或持久化)数据帧或rdd时的内存使用概念。我知道spark.memory.storageFraction决定了只能作为内存持久化的数据的大小限制。而且我还了解到,默认情况下,数据帧上的
.cache()
使用
StorageLevel.MEMORY\u和磁盘
调用
persist()
,而在rdd上,
.cache()
使用
StorageLevel.MEMORY\u
调用
persist()
。现在,在下面的代码片段中,我正在使用rdd textFile API从HDFS读取一个693 MB的文本文件并对其进行缓存。然后我在计算计数

rdd1=spark.sparkContext.textFile("/public/cards/largedeck.txt").cache()
print(rdd1.count())
所以据我所知,它应该只使用
StorageLevel.MEMORY\u
。但我可以在spark UI上看到如下内容

它仅显示存储上的内存大小
11.8MB
,以及
100%缓存分数
。从存储级别上看,它是一个序列化内存。即使我明确提到
.persist(仅限StorageLevel.MEMORY)
而不是
.cache()
,它仍然为我提供了一个序列化内存


我想了解通过应用
.cache()
.persist(仅限StorageLevel.MEMORY_),磁盘上的693 MB数据是如何变成11.8 MB序列化缓存数据的

双精度数字的字符串表示形式比内存中双精度数字的8字节表示形式大得多。我在这里使用textFile API将整行作为字符串读取,并且底层文件也是一个.txt文件,那么数据类型在这里有什么关系呢?第二,为什么在我不使用序列化的StorageLevel(仅限StorageLevel.Memory_)时,它是“内存序列化1x复制的”