gpt4 book ai didi

apache-spark - Spark SQL中缓存机制的区别

转载 作者:行者123 更新时间:2023-12-02 19:54:19 28 4
gpt4 key购买 nike

我正在尝试了解 Spark SQL 中的各种缓存机制。下面的代码片段有什么区别吗:

方法一:

cache table test_cache AS
select a, b, c
from x
inner join y
on x.a = y.a;

方法2:

create temporary view test_cache AS
select a, b, c
from x
inner join y
on x.a = y.a;

cache table test_cache;

由于 Spark 中的计算是惰性的,Spark 会在方法 2 中第一次创建临时表时缓存结果吗?或者它会等待应用任何收集吗?

最佳答案

在 Spark SQL 中,如果直接使用 SQL 或使用 DataFrame DSL,缓存会有所不同。使用DSL,缓存是惰性的,所以调用后

my_df.cache()

数据不会直接缓存在内存中,而是仅将有关缓存的信息添加到查询计划中,并且在对 DataFrame 调用某些操作后数据将被缓存。

另一方面,像在示例中那样直接使用 SQL,默认情况下会立即进行缓存。因此,在方法 1 中,作业将立即运行,并且数据将被放入内存中。在方法 2 中,作业将在调用带有缓存的查询后运行:

cache table test_cache;

同样使用 SQL,也可以通过显式使用 lazy 关键字来设置惰性缓存:

cache lazy table test_cache;

在这种情况下,作业不会立即运行,并且在针对表 test_cache 调用某些操作后,数据将被放入内存中。

总而言之,您的两种方法在缓存方面是等效的,并且在运行代码块后将立即缓存数据。

关于apache-spark - Spark SQL中缓存机制的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57419003/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com