【问题标题】:cache tables in apache spark sql在apache spark sql中缓存表
【发布时间】:2016-05-26 22:56:39
【问题描述】:

来自 Spark 官方document,它说:

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

【问题讨论】:

    标签: caching apache-spark apache-spark-sql


    【解决方案1】:

    是的,如果使用此设置,缓存表会将整个表压缩到内存中:spark.sql.inMemoryColumnarStorage.compressed = true。请记住,在 DataFrame 上进行缓存时,它是延迟缓存,这意味着它只会缓存在下一个处理事件中使用的行。因此,如果您对该 DataFrame 进行查询并且只扫描 100 行,那么这些只会被缓存,而不是整个表。但是,如果您在 SQL 中执行 CACHE TABLE MyTableName,则默认为急切缓存并将缓存整个表。您可以像这样在 SQL 中选择 LAZY 缓存:

    CACHE LAZY TABLE MyTableName
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-30
      • 2016-11-29
      • 1970-01-01
      相关资源
      最近更新 更多