在设定的频率后刷新缓存的 Spark 数据帧



我正在开发一个SparkStreaming解决方案,其中将Hive表缓存为数据帧,然后将流事件与缓存的数据帧联接以生成结果。

但是,问题是 Hive 表将以特定频率更新,因此缓存的数据帧也应相应地更新。

有什么办法,比如一些TTL或围绕缓存数据帧的任何其他机制,其中数据在特定时间间隔内使用更新的Hive表记录自动刷新。

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

对于您的问题,据我所知,没有TTL机制来更新缓存的数据帧。您需要再次显式读取数据并缓存它

有针对您的情况的解决方法。在单独的线程中,启动一个 cron 作业或计划作业,并在一段时间后使用触发器以下代码进行设置,您可以根据需要设置该代码。

val spark: SparkSession = ???
spark.sql("refresh table <your table name>")

最新更新