如何刷新表并同时执行?

宇宙人*_*宇宙人 7 apache-spark spark-streaming apache-spark-sql

我正在使用Spark Streaming 2.1.我想定期刷新一些缓存表(由spark提供的DataSource,如镶木地板,MySQL或用户定义的数据源).

  1. 如何刷新表?

    假设我有一些表加载

    spark.read.format("").load().createTempView("my_table")

    它也被缓存

    spark.sql("cache table my_table")

    是否足以使用以下代码刷新表,并且当下次加载表时,它将自动被缓存

    spark.sql("refresh table my_table")

    或者我必须手动执行此操作

    spark.table("my_table").unpersist spark.read.format("").load().createOrReplaceTempView("my_table") spark.sql("cache table my_table")

  2. 同时刷新表是否安全?

    并发我的意思是使用ScheduledThreadPoolExecutor除主线程之外的刷新工作.

    当我在桌面上调用refresh时Spark会使用缓存表会发生什么?

小智 10

在Spark 2.2.0中,他们引入了刷新表元数据的功能,如果该表元数据是由hive或某些外部工具更新的。

您可以使用API​​来实现,

spark.catalog.refreshTable("my_table")
Run Code Online (Sandbox Code Playgroud)

该API将更新该表的元数据以使其保持一致。