我在Spark 2.2.0上,在EMR上运行。
我有一个大数据帧df
(压缩的snappy文件中大约40G),它由键k1
和k2
分区。
当我通过k1
=== v1
或(k1
=== v1
&& k2 ===
v2`查询时,我可以看到它只查询分区中的文件(大约2%的文件)。
但是,如果我缓存或持久 df
,那么这些查询突然会点击所有分区并爆炸内存或性能要差得多。
这是一个很大的惊喜 - 有没有办法进行缓存,保留分区信息
答案 0 :(得分:4)
这是可以预料的。用于缓存的Spark内部列式格式是输入格式不可知的。一旦你加载了数据,就没有与原始输入的连接消失。
这里的例外是新的数据源API [SPARK-22389][SQL] data source v2 partitioning reporting interface,它允许持久化分区信息,但它在2.3中是新的,仍然是实验性的。