gpt4 book ai didi

performance - 什么时候在 pyspark 中缓存?

转载 作者:行者123 更新时间:2023-12-05 04:20:15 27 4
gpt4 key购买 nike

我一直在阅读有关 pyspark 缓存以及执行工作原理的内容。当多个操作触发相同的计算时,我很清楚如何使用 .cache():

df = sc.sql("select * from table")
df.count()
df = df.where({something})
df.count()

可以通过以下方式改进:

df = sc.sql("select * from table").cache()
df.count()
df = df.where({something})
df.count()

但是,我不清楚如果没有中间操作它是否以及为什么会有利:

df = sc.sql("select * from table")
df2 = sc.sql("select * from table2")
df = df.where({something})
df2 = df2.where({something})
df3 = df.join(df2).where({something})
df3.count()

在这种类型的代码中(我们只有一个最终操作)cache() 有用吗?

最佳答案

开门见山:不,那样的话它没有用

Transformations 在 Spark 中有惰性求值。即,它们被记录下来,但执行需要由操作(例如您的计数)触发。

因此,当您执行 df3.count() 时,它将评估到该点为止的所有转换。

如果您不执行其他操作,那么可以肯定的是,在任何地方添加 .cache() 都不会提供任何性能改进。

但是,即使您执行多个操作,.cache() [或 .checkpoint(),具体取决于您的问题] 有时也不会提供任何性能提升。这在很大程度上取决于您的问题,以及您的转换成本 - 例如,加入可能非常昂贵。

此外,如果您使用其交互式 shell 运行 Spark,最终有时 .checkpoint() 在代价高昂的转换之后可能更适合。

关于performance - 什么时候在 pyspark 中缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74563945/

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