Apache spark 通过在不同线程中执行多个查询来触发数据帧缓存

Apache spark 通过在不同线程中执行多个查询来触发数据帧缓存,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我想知道spark中的数据帧缓存是否是线程安全的。在我们的一个用例中,我从配置单元表创建一个数据框架,然后通过不同的线程在同一数据框架上运行多个SQL。由于我们的存储和计算是解耦的,并且由于某些原因读取速度非常慢,所以我考虑将数据帧缓存在内存中,并将缓存的数据帧用于所有查询。数据帧缓存是线程安全的吗?这样做还有其他陷阱吗? 我的计算集群中有足够的内存(磁盘和RAM)来缓存表,我将在同一数据帧上执行10多个查询 谢谢 AkashRe:“我想知道spark中的数据帧缓存是否是线程安全的。” 无论何时

我想知道spark中的数据帧缓存是否是线程安全的。在我们的一个用例中,我从配置单元表创建一个数据框架,然后通过不同的线程在同一数据框架上运行多个SQL。由于我们的存储和计算是解耦的,并且由于某些原因读取速度非常慢,所以我考虑将数据帧缓存在内存中,并将缓存的数据帧用于所有查询。数据帧缓存是线程安全的吗?这样做还有其他陷阱吗? 我的计算集群中有足够的内存(磁盘和RAM)来缓存表,我将在同一数据帧上执行10多个查询

谢谢

Akash

Re:“我想知道spark中的数据帧缓存是否是线程安全的。”

无论何时配置executor Core,都在某种程度上使用多个线程来处理每个executor上的数据。这意味着在正常的SPARK SQL场景中,DAG也是使用多个线程处理的

缓存不应该对线程安全产生任何影响。此外,数据帧和RDD一样是不可变的,因此您不会更改现有数据帧中的数据,而是生成一个新的数据帧

因此,即使在缓存之后,当您创建多个线程在同一数据帧上运行不同的SQL时,每个线程都会从缓存阶段开始,并基于SQL计算一个新的阶段