在内存中缓存 Spark 数据帧是否有额外的开销?
Is there an extra overhead to cache Spark dataframe in memory?
我是 Spark 的新手,想了解是否有额外的 overhead/delay 来持久化和取消持久化内存中的数据帧。
据我所知,当我们使用缓存数据帧时不会发生数据移动,它只是保存在执行程序的内存中。所以这应该只是 setting/unsetting 一个标志的问题。
我正在 spark 流作业中缓存数据帧,想知道这是否会导致批处理执行的额外延迟。
if there is an extra overhead/delay to persist and un-persist a dataframe in memory.
视情况而定。如果您只将一个 DataFrame 标记为要持久化,那么实际上什么也不会发生,因为它是一个惰性操作。您必须执行一个操作来触发 DataFrame 持久化/缓存。您的操作会增加额外的开销。
此外,将持久性(缓存)视为一种预先计算数据并将其保存在更接近执行程序(内存、磁盘或其组合)的方式。将数据从它所在的位置移动到执行程序确实会在执行时增加额外的开销(即使只是一点点)。
在内部,Spark 将数据作为块进行管理(在执行程序上使用 BlockManagers)。他们是按需交换块的同行(使用类似 torrent 的协议)。
取消持久化 DataFrame 只是向 BlockManager 发送请求(同步或异步)以删除 RDD 块。如果它以异步方式发生,开销为 none(减去执行者在 运行 任务时必须做的额外工作)。
So it should be just a matter of setting/unsetting a flag.
从某种意义上说,这就是幕后情况。由于 DataFrame 或 RDD 只是描述分布式计算的抽象概念,在创建时什么都不做,所以这个持久化/取消持久化只是设置/取消设置一个标志。
可以在执行时注意到更改。
I am caching a dataframe in a spark streaming job and wanted to know if this could lead to additional delay in batch execution.
如果您使用异步缓存(默认),则延迟应该非常小。
我是 Spark 的新手,想了解是否有额外的 overhead/delay 来持久化和取消持久化内存中的数据帧。
据我所知,当我们使用缓存数据帧时不会发生数据移动,它只是保存在执行程序的内存中。所以这应该只是 setting/unsetting 一个标志的问题。
我正在 spark 流作业中缓存数据帧,想知道这是否会导致批处理执行的额外延迟。
if there is an extra overhead/delay to persist and un-persist a dataframe in memory.
视情况而定。如果您只将一个 DataFrame 标记为要持久化,那么实际上什么也不会发生,因为它是一个惰性操作。您必须执行一个操作来触发 DataFrame 持久化/缓存。您的操作会增加额外的开销。
此外,将持久性(缓存)视为一种预先计算数据并将其保存在更接近执行程序(内存、磁盘或其组合)的方式。将数据从它所在的位置移动到执行程序确实会在执行时增加额外的开销(即使只是一点点)。
在内部,Spark 将数据作为块进行管理(在执行程序上使用 BlockManagers)。他们是按需交换块的同行(使用类似 torrent 的协议)。
取消持久化 DataFrame 只是向 BlockManager 发送请求(同步或异步)以删除 RDD 块。如果它以异步方式发生,开销为 none(减去执行者在 运行 任务时必须做的额外工作)。
So it should be just a matter of setting/unsetting a flag.
从某种意义上说,这就是幕后情况。由于 DataFrame 或 RDD 只是描述分布式计算的抽象概念,在创建时什么都不做,所以这个持久化/取消持久化只是设置/取消设置一个标志。
可以在执行时注意到更改。
I am caching a dataframe in a spark streaming job and wanted to know if this could lead to additional delay in batch execution.
如果您使用异步缓存(默认),则延迟应该非常小。