【问题标题】:Databricks result cacheDatabricks 结果缓存
【发布时间】:2019-10-17 11:26:22
【问题描述】:

Databricks 有结果缓存的概念吗?当我运行 SQL 查询时,它是否将结果集缓存在某处以进行亚秒级访问,还是我们只有 Delta 湖缓存?我在文档中找不到任何东西,在这个阶段我假设它不作为一个功能存在。有人可以澄清一下吗?

【问题讨论】:

  • 据我所知,这是不可能的,文档确实涉及清除缓存以提高性能,但与这个特定问题无关。我希望这能进一步澄清未来的答案。
  • databricks 平台中有一个概念叫增量缓存。您可能想检查一下,这与火花缓存不同。增量缓存包含远程数据的本地副本。它可以提高各种查询的性能,但不能用于存储任意子查询的结果。见docs.databricks.com/delta/optimizations/delta-cache.html
  • 增量缓存与结果缓存非常不同。使用增量缓存,数据缓存在本地节点上。

标签: apache-spark databricks


【解决方案1】:

将指定的简单SELECT查询访问的数据缓存在Delta缓存中。您可以通过提供列名列表来选择要缓存的列子集,并通过提供谓词来选择行子集。这使得后续查询能够尽可能避免扫描原始文件。此构造仅适用于 Parquet 表。也支持视图,但扩展查询仅限于简单查询。

示例:

CACHE SELECT * FROM boxes
CACHE SELECT width, length FROM boxes WHERE height=3

参考:请参阅Delta and Apache Spark caching comparison,了解 RDD 缓存和 Databricks IO 缓存之间的区别。

Delta 缓存通过使用快速中间数据格式在节点的本地存储中创建远程文件的副本来加速数据读取。每当必须从远程位置获取文件时,数据都会自动缓存。然后在本地执行相同数据的连续读取,从而显着提高读取速度。

Databricks 中有两种类型的缓存可用:

  • 增量缓存

  • Apache Spark 缓存

您可以同时使用 Delta 缓存和 Spark 缓存。本节概述了它们之间的主要区别,以便您可以选择最适合您的工作流程的工具。

存储数据的类型: Delta 缓存包含远程数据的本地副本。它可以提高各种查询的性能,但不能用于存储任意子查询的结果。 Spark 缓存可以存储任何子查询数据的结果以及以 Parquet 以外的格式存储的数据(例如 CSV、JSON 和 ORC)。

性能: Delta 缓存中存储的数据可以比 Spark 缓存中的数据更快地读取和操作。这是因为 Delta 缓存使用高效的解压缩算法,并以最佳格式输出数据,以便使用全阶段代码生成进行进一步处理。

自动与手动控制:启用增量缓存后,必须从远程源获取的数据会自动添加到缓存中。这个过程是完全透明的,不需要任何操作。但是,要预先将数据预加载到缓存中,您可以使用 CACHE 命令(请参阅缓存数据子集)。使用 Spark 缓存时,必须手动指定要缓存的表和查询。

磁盘与基于内存的对比: Delta 缓存完全存储在本地磁盘上,因此内存不会从 Spark 中的其他操作中占用。由于现代 SSD 的高读取速度,Delta 缓存可以完全驻留在磁盘上,而不会对其性能产生负面影响。相比之下,Spark 缓存使用内存。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-04
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 2010-09-17
    • 2012-07-29
    相关资源
    最近更新 更多