在设置频率后刷新缓存的Spark Dataframe

时间:2018-07-04 06:45:37

标签: apache-spark apache-spark-sql spark-streaming

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

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

在缓存的Dataframe周围是否有任何方法,例如某种TTL或任何其他机制,其中的数据会在一定时间间隔内使用更新的Hive表记录自动刷新。

2 个答案:

答案 0 :(得分:0)

让我们理解一下,Cache()函数将数据帧存储在内存中,因此,如果您将对此数据帧执行任何其他操作,则从创建数据帧开始就不会遍历其DAG,仅当您执行该操作时,它才有用当您将数据存储到内存时,此数据帧上将执行各种操作,最初存储需要花费时间,但进一步的操作会更快。根据您的情况,我将不需要缓存数据作为其流平台,而无需对数据执行缓存操作并将结果存储在追加模式下的HDFS中。缓存数据帧将占用您的群集内存。

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

答案 1 :(得分:0)

您的案子可以解决。在单独的线程中,在一定时间间隔后开始执行一个cron作业或通过触发以下代码安排作业,您可以根据需要进行设置。

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