Caching apachesparksql中的缓存表

Caching apachesparksql中的缓存表,caching,apache-spark,apache-spark-sql,Caching,Apache Spark,Apache Spark Sql,Spark的官员说: Spark SQL可以通过以下方式使用内存中的列格式缓存表: 调用sqlContext.cacheTable(“tableName”)或dataFrame.cache()。然后 Spark SQL将只扫描所需的列,并将自动调整 压缩以最小化内存使用和GC压力。你可以打电话 uncacheTable(“tableName”)从内存中删除该表 使用内存中的列格式缓存表到底意味着什么? 把整张桌子放进记忆里?正如我们所知,缓存也是惰性的, 在对查询执行第一个操作后,将缓存该表。如

Spark的官员说:

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

使用内存中的列格式缓存表到底意味着什么? 把整张桌子放进记忆里?正如我们所知,缓存也是惰性的, 在对查询执行第一个操作后,将缓存该表。如果选择不同的操作或查询,是否会对缓存表产生任何影响?我在谷歌上搜索了好几次这个缓存主题,但没有找到一些详细的文章。如果有人能为这个主题提供一些链接或文章,我将不胜感激


是,如果使用此设置,缓存表会将整个表放入压缩内存:spark.sql.inMemoryColumnarStorage.compressed=true。请记住,在数据帧上进行缓存时,它是延迟缓存,这意味着它将只缓存在下一个处理事件中使用的行。因此,如果在该数据帧上执行查询,并且只扫描100行,那么这些行将只被缓存,而不是整个表。但是,如果您在SQL中缓存表MyTableName,则默认情况下,它是“急缓存”,并将缓存整个表。您可以选择SQL中的延迟缓存,如下所示:

CACHE LAZY TABLE MyTableName