Fih*_*hop 3 caching apache-spark apache-spark-sql
从Spark官方文档中可以看出:
Spark SQL可以通过调用sqlContext.cacheTable("tableName")或dataFrame.cache()来使用内存中的列式格式来缓存表.然后,Spark SQL将仅扫描所需的列,并自动调整压缩以最小化内存使用和GC压力.您可以调用sqlContext.uncacheTable("tableName")从内存中删除该表.
使用内存中柱状格式缓存表的真正含义是什么?把整个表放入内存?由于我们知道缓存也是惰性的,因此在查询的第一个操作之后缓存该表.如果选择不同的操作或查询,它对缓存表有什么影响吗?我已经多次搜索过这个缓存主题,但未能找到一些详细的文章.如果有人能为这个主题提供一些链接或文章,我将非常感激.
http://spark.apache.org/docs/latest/sql-programming-guide.html#caching-data-in-memory
是的,如果使用此设置,则缓存表会将整个表压缩到内存中:spark.sql.inMemoryColumnarStorage.compressed = true.请记住,在对DataFrame进行缓存时,它是Lazy缓存,这意味着它只会缓存下一个处理事件中使用的行.因此,如果您对该DataFrame执行查询并且仅扫描100行,则只会缓存这些行,而不是整个表.但是,如果在SQL中执行CACHE TABLE MyTableName,则默认为急切缓存并将缓存整个表.您可以在SQL中选择LAZY缓存,如下所示:
CACHE LAZY TABLE MyTableName
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5975 次 |
| 最近记录: |