Apache spark 缓存查询性能火花

Apache spark 缓存查询性能火花,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,如果我试图缓存一个巨大的数据帧(例如:100GB表),当我对缓存的数据帧执行查询时,它会执行完整表扫描吗?spark将如何索引数据。Spark文档说明: Spark SQL可以通过以下方式使用内存中的列格式缓存表: 调用spark.catalog.cacheTable(“tableName”)或dataFrame.cache()。 然后Spark SQL将只扫描所需的列,并将自动 调整压缩以最小化内存使用和GC压力。你可以 调用spark.catalog.uncacheTable(“tableN

如果我试图缓存一个巨大的
数据帧
(例如:100GB表),当我对缓存的
数据帧
执行查询时,它会执行完整表扫描吗?spark将如何索引数据。Spark文档说明:

Spark SQL可以通过以下方式使用内存中的列格式缓存表: 调用spark.catalog.cacheTable(“tableName”)或dataFrame.cache()。 然后Spark SQL将只扫描所需的列,并将自动 调整压缩以最小化内存使用和GC压力。你可以 调用spark.catalog.uncacheTable(“tableName”)从中删除该表 记忆

我并没有完全理解上面的语句,若有人详细解释下面的语句或者它如何优化大型缓存数据帧上的查询,那个将非常有帮助

“然后Spark SQL将只扫描所需的列,并将自动

“调谐压缩”

当我对缓存的
DataFrame
执行查询时,它会执行全表扫描吗?spark将如何索引数据

虽然可以进行一些较小的优化,但Spark根本不索引数据。所以在一般情况下,您应该假设Spark将执行完整的数据扫描

然而,它可以应用早期预测。因此,如果查询只使用列的子集,Spark只能访问这些列,这是必需的

柱状存储是很好的压缩候选,Spark支持多种压缩方案(
runlengtencoding
DictEncoding
BooleanBitSet
IntDelta
LongDelta
)。根据列的类型和计算的统计数据,Spark可以自动选择适当的压缩格式或跳过任何压缩


通常,与列存储一起使用的压缩方案允许对压缩数据进行查询,有些(如RLE)可用于高效选择。同时,您可以增加存储在内存中且无需从磁盘获取数据即可访问的数据量。

您可以从.explain()方法提供查询计划吗?