我在Spark 2.2.0上,在EMR上运行.
我有一个很大的数据帧df(40G左右的压缩snappy文件),它由键k1和分区k2.
当我通过k1=== v1或(k1=== v1&& k2 ===v2`)查询时,我可以看到它只查询分区中的文件(大约2%的文件).
但是,如果我缓存或持久存在 df,突然这些查询会击中所有分区,并且要么会耗尽内存,要么性能要低得多.
这是一个很大的惊喜 - 有没有办法进行缓存,以保留分区信息
这是可以预料的。用于缓存的 Spark 内部列格式与输入格式无关。一旦加载数据,与原始输入的连接就消失了。
这里的例外是新的数据源 API [SPARK-22389][SQL] 数据源 v2 分区报告接口,它允许持久保存分区信息,但它是 2.3 中的新增功能,并且仍处于实验阶段。
| 归档时间: |
|
| 查看次数: |
329 次 |
| 最近记录: |