首页 > 解决方案 > 缓存嵌套列时,Spark 是否优化存储

问题描述

我从 parquet 中读取了一个 DataFrame,我想在选择一些嵌套结构后缓存它。

df.select($"a.b.c" as "c").cache()

我知道整个a列将从输入中读取(Spark 2.5。应该解决这个问题:SPARK-17636)但我想知道存储是否会更聪明并且只存储选择的结果(所以不是全部a) .

标签: apache-sparkapache-spark-sqlparquet

解决方案


是的,在采取行动后,只有选择的结果会被缓存。select 语句返回一个数据帧,即缓存的数据帧。

请注意,在您的代码中尚未发生缓存,因为未采取任何操作。您需要执行一些操作来填充缓存,例如

df.select($"a.b.c" as "c").cache().count()

推荐阅读