Apache spark 在设置的频率后刷新缓存的Spark数据帧

Apache spark 在设置的频率后刷新缓存的Spark数据帧,apache-spark,apache-spark-sql,spark-streaming,Apache Spark,Apache Spark Sql,Spark Streaming,我正在开发一个SparkStreaming解决方案,其中一个配置单元表被缓存为一个数据帧,然后流事件将与缓存的数据帧连接以产生结果 然而,问题是配置单元表将以特定的频率更新,因此缓存的数据帧也应该相应地更新 有没有办法,比如说,在缓存的数据帧周围有某种TTL或任何其他机制,在这种机制中,数据会在一定的时间间隔内与更新的配置单元表记录一起自动刷新。让我们了解一下这个概念,Cache()函数将数据帧存储在内存中,因此,如果您要在此数据帧上执行任何进一步的操作,则spark从创建数据帧开始就不会遍历其

我正在开发一个SparkStreaming解决方案,其中一个配置单元表被缓存为一个数据帧,然后流事件将与缓存的数据帧连接以产生结果

然而,问题是配置单元表将以特定的频率更新,因此缓存的数据帧也应该相应地更新


有没有办法,比如说,在缓存的数据帧周围有某种TTL或任何其他机制,在这种机制中,数据会在一定的时间间隔内与更新的配置单元表记录一起自动刷新。

让我们了解一下这个概念,Cache()函数将数据帧存储在内存中,因此,如果您要在此数据帧上执行任何进一步的操作,则spark从创建数据帧开始就不会遍历其DAG,只有当您在将数据存储到内存中时在此数据帧上执行各种操作时,它才有用,最初需要时间来存储,但进一步的操作会更快。根据您的场景,我不认为有任何需要将数据缓存为不缓存的流媒体平台,对数据执行操作并将结果以追加模式存储在HDFS中。缓存数据帧将占用您的群集内存


据我所知,对于您的问题,没有更新缓存数据帧的TTL机制。您需要再次明确地读取数据并将其缓存

您的案例有解决办法。在一个单独的线程中,在一段时间间隔后启动一个cron作业或使用触发器跟踪代码调度作业,您可以根据需要进行设置

val spark: SparkSession = ???
spark.sql("refresh table <your table name>")
val spark:SparkSession=???
sql(“刷新表”)