Apache spark 在内存中缓存Spark数据帧是否有额外的开销?

Apache spark 在内存中缓存Spark数据帧是否有额外的开销?,apache-spark,apache-spark-sql,spark-streaming,spark-structured-streaming,Apache Spark,Apache Spark Sql,Spark Streaming,Spark Structured Streaming,我是Spark的新手,希望了解在内存中持久化和取消持久化数据帧是否有额外的开销/延迟 据我所知,当我们使用缓存数据帧时,不会发生数据移动,它只是保存在执行器的内存中。因此,这应该只是设置/取消设置标志的问题 我正在spark流作业中缓存数据帧,想知道这是否会导致批处理执行的额外延迟 如果要在内存中持久化和取消持久化数据帧,需要额外的开销/延迟 视情况而定。如果只标记要持久化的数据帧,那么实际上不会发生任何事情,因为这是一个惰性操作。您必须执行一个操作来触发数据帧持久性/缓存。通过该操作,您确实会

我是Spark的新手,希望了解在内存中持久化和取消持久化数据帧是否有额外的开销/延迟

据我所知,当我们使用缓存数据帧时,不会发生数据移动,它只是保存在执行器的内存中。因此,这应该只是设置/取消设置标志的问题

我正在spark流作业中缓存数据帧,想知道这是否会导致批处理执行的额外延迟

如果要在内存中持久化和取消持久化数据帧,需要额外的开销/延迟

视情况而定。如果只标记要持久化的数据帧,那么实际上不会发生任何事情,因为这是一个惰性操作。您必须执行一个操作来触发数据帧持久性/缓存。通过该操作,您确实会增加额外的开销

此外,可以将持久性(缓存)视为一种预计算数据并将其保存到执行器(内存、磁盘或它们的组合)附近的方法。将数据从其所在地移动到执行者,确实会在执行时增加额外的开销(即使只是一点点)

在内部,Spark将数据作为块进行管理(在执行器上使用块管理器)。他们是按需交换块的对等方(使用类似torrent的协议)

取消持久化数据帧只是向BlockManager发送请求(同步或异步)以删除RDD块。如果它以异步方式发生,则开销为零(减去执行者在运行任务时必须做的额外工作)

因此,这应该只是设置/取消设置标志的问题

从某种意义上说,这就是它被掩盖的方式。由于数据帧或RDD只是描述分布式计算的抽象,在创建时不做任何事情,所以这个persist/unpersist只是设置/取消设置一个标志

可以在执行时注意到更改

我正在spark流作业中缓存数据帧,想知道这是否会导致批处理执行的额外延迟


如果使用异步缓存(默认设置),延迟应该非常小。

查看是否[有用吗?根据缓存对象是Dataframe还是RDD,延迟计算有什么不同吗?Dataframe是RDD上的一层。缓存对每个对象都略有不同,但最终都是RDD.persist。因此,在这两种情况下,缓存都是延迟计算。正确吗?什么是“延迟计算”?“由于数据帧或RDD只是描述分布式计算的抽象,在创建时不做任何事情,所以此持久化/非持久化只是设置/取消设置一个标志。”