我正在使用Spark Streaming 2.1。我想定期刷新一些緩存表(由spark提供的DataSource加載,如parquet,MySQL或用戶定義的數據源)。如何刷新表並同時執行?
如何刷新表格?
假設我有一些表格由
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")
做手工是安全的刷新表併發?
併發我的意思是使用
ScheduledThreadPoolExecutor
來做除主線程之外的刷新工作。如果Spark在桌面上調用刷新時使用緩存表會發生什麼情況?
API Spark.catalog.refreshTable存在於Spark 2.2.0之前,我想它和spark.sql(「refresh table ...」)是一樣的。你的意思是說,在Spark 2.2.0之前通過使用'spark.catalog.refreshTable'是不夠的,我必須手動unpersist和recache?併發性又如何?使用spark.catalog.refreshTable的 –
應該足夠了。你的意思是併發!如果你的意思是並行化,那麼就我所知,它並不會損害並行化。 – Ganesh
我需要解釋更多,我的英語很差。你回答和你的評論是不一致的。在您的回答中,您指出該功能是在Spark 2.2.0中引入的。在你的評論中,你甚至會說即使使用Spark 2.1.0'spark.catalog.refreshTable'就足夠了。它讓我非常困惑。通過併發性,我有一個例子。當Spark執行一些正在使用某個緩存表t1的物理計劃時,我同時調用refresh t1,Spark會做什麼?等到物理計劃完成,然後刷新表格。或者在實際使用計劃中的表之前重新加載表格? –