我正在开发一个SparkStreaming解决方案,在该解决方案中,配置单元表作为数据帧缓存,然后将流事件与缓存的数据帧合并以产生结果。
但是问题是Hive表将以特定频率更新,因此缓存的Dataframe也应相应更新。
在缓存的Dataframe周围是否有任何方法,例如某种TTL或任何其他机制,其中的数据会在一定时间间隔内使用更新的Hive表记录自动刷新。
答案 0 :(得分:0)
让我们理解一下,Cache()函数将数据帧存储在内存中,因此,如果您将对此数据帧执行任何其他操作,则从创建数据帧开始就不会遍历其DAG,仅当您执行该操作时,它才有用当您将数据存储到内存时,此数据帧上将执行各种操作,最初存储需要花费时间,但进一步的操作会更快。根据您的情况,我将不需要缓存数据作为其流平台,而无需对数据执行缓存操作并将结果存储在追加模式下的HDFS中。缓存数据帧将占用您的群集内存。
据我所知,对于您的问题,没有TTL机制可以更新缓存的数据帧。您需要再次明确地读取数据并将其缓存
答案 1 :(得分:0)
您的案子可以解决。在单独的线程中,在一定时间间隔后开始执行一个cron作业或通过触发以下代码安排作业,您可以根据需要进行设置。
val spark: SparkSession = ???
spark.sql("refresh table <your table name>")