在Spark 2.3.0中为一个简单的并行化集合计算统计信息时,我得到一些奇怪的结果:
val df = spark.sparkContext.parallelize(Seq("y")).toDF("y")
df.queryExecution.stringWithStats
== Optimized Logical Plan
== Project [value#7 AS y#9], Statistics(sizeInBytes=8.0 EB, hints=none)
+- SerializeFromObject [staticinvoke(class org.apache.spark.unsafe.types.UTF8String, StringType, fromString, input[0, java.lang.String, true], true, false) AS value#7], Statistics(sizeInBytes=8.0 EB, hints=none)
+- ExternalRDD [obj#6], Statistics(sizeInBytes=8.0 EB, hints=none)
那是8.0艾字节的数据。
如果我做同样的事情而没有并行化
== Optimized Logical Plan
== LocalRelation [x#3], Statistics(sizeInBytes=20.0 B, hints=none)
很显然,在对集合进行序列化时,存在一个副作用,即查询计划程序无法准确确定其大小。我在这里想念东西吗?