我查阅了多个文档,了解到在Spark RDD上执行缓存/持久化的默认行为将RDD作为反序列化对象存储到JVM内存中但是,当我使用示例文件(5-6行)运行一些测试时,spark UI中Storage部分下的Storage Level总是显示为Memory Serialized 1x Replicated有谁能帮我弄明白我是否遗漏了什么吗?
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 codePython source code
val MEMORY_ONLY = new StorageLevel(false, true, false, true) //Scala StorageLevel.MEMORY_ONLY = StorageLevel(False, True, False, False) //Python
其中最后一个参数是反序列化的,所以如果认为这就是为什么它的不同,但目前我不确定是什么原因
1条答案
按热度按时间vsdwdz231#
我做了和你一样的测试我准备了一个小文件:
然后我用Spark 3.2.1和Scala 2.12启动了10.4 databricks社区集群,并执行了以下代码:
在SparkUI中,我可以看到以下结果:
这同样适用于更大的文件(截图来自3.3,但相同)
你的信封上也是一样的吗?
编辑:我可以确认,如Python的注解中所述,它是序列化的。
我检查了源代码,我可以看到Scala和Python之间的区别。对于rdd,它们都使用MEMORY_ONLY级别进行缓存,但在Python中,它是以不同于i Scala的方式定义的
Scala source code
Python source code
其中最后一个参数是反序列化的,所以如果认为这就是为什么它的不同,但目前我不确定是什么原因