Pyspark:RDD缓存始终序列化数据

j2cgzkjk  于 2022-11-01  发布在  Spark
关注(0)|答案(1)|浏览(149)

我查阅了多个文档,了解到在Spark RDD上执行缓存/持久化的默认行为将RDD作为反序列化对象存储到JVM内存中
但是,当我使用示例文件(5-6行)运行一些测试时,spark UI中Storage部分下的Storage Level总是显示为Memory Serialized 1x Replicated
有谁能帮我弄明白我是否遗漏了什么吗?

vsdwdz23

vsdwdz231#

我做了和你一样的测试我准备了一个小文件:

id;name;value
1,test,full
2,test,empty
3,test,important
4,test2,sadfdsf
5,test4,gfdsfgdfg

然后我用Spark 3.2.1和Scala 2.12启动了10.4 databricks社区集群,并执行了以下代码:

//small files
val rddWhole = spark.sparkContext.textFile("dbfs:/FileStore/shared_uploads/my-email@gmail.com/very_small_csv.csv") 
rddWhole.cache().count()

在SparkUI中,我可以看到以下结果:

这同样适用于更大的文件(截图来自3.3,但相同)

你的信封上也是一样的吗?
编辑:我可以确认,如Python的注解中所述,它是序列化的。

我检查了源代码,我可以看到Scala和Python之间的区别。对于rdd,它们都使用MEMORY_ONLY级别进行缓存,但在Python中,它是以不同于i Scala的方式定义的
Scala source code
Python source code

val MEMORY_ONLY = new StorageLevel(false, true, false, true) //Scala
StorageLevel.MEMORY_ONLY = StorageLevel(False, True, False, False) //Python

其中最后一个参数是反序列化的,所以如果认为这就是为什么它的不同,但目前我不确定是什么原因

相关问题