При вычислении статистики для простого распараллеленного сбора в 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)
Очевидно, что при сериализации коллекции возникает побочный эффект, который планировщик запросов не может точно определить размер. Я что-то здесь упускаю?