首頁 > 軟體

Spark臨時表tempView的註冊/使用/登出/注意事項(推薦)

2022-10-20 14:03:50

createTempView運作原理

先說一個眾人皆知的知識:
Spark中的運算元包含transformation運算元和action運算元,transformation是根據原有RDD建立一個新的RDD,而action則把RDD操作後的結果返回給driver。Spark對transformation的抽象可以大大提高效能,這是因為在Spark中,所有transformation操作都是lazy模式,即Spark不會立即計算結果,而只是簡單地記住所有對資料集的轉換操作邏輯。這些轉換隻有遇到action操作的時候才會開始計算。這樣的設計使得Spark更加高效。

低效做法

sql("select a,b from table where xxx").createTempView("view1")
sql("select a from view1 where xxx").show()
sql("select b from view1 where xxx").show()

使用createTempView後,查詢這個檢視每次都很耗時了,正是因為createTempView操作是lazy模式,在沒有action運算元觸發之前,它並沒有什麼實質性的運作,僅僅記錄了一個建立檢視的邏輯
Spark每次遇到action運算元show()方法的時候,才開始真正計算,上面程式碼中兩次用到檢視view1,那麼意味著建立檢視的方法會執行兩次,因此非常的耗時,所以需要對view1進行快取處理

快取臨時表方式:

方式1 建立

// 建立它的SparkSession物件終止前有效
df.createOrReplaceTempView("tempViewName")  
// spark應用程式終止前有效
df.createOrReplaceGlobalTempView("tempViewName") 

登出

spark.catalog.dropTempView("tempViewName")
spark.catalog.dropGlobalTempView("tempViewName")

方式2

建立

session.table("tempViewName").cache()

登出

session.table("tempViewName").unpersist()

方式3

建立

commonDF.cahe() 或 commonDF.persist(StorageLevel.MEMORY_AND_DISK)
commonDF.createOrReplaceTempView("tempViewName")

登出

commonDF.unpersist()

臨時表生命週期

原始碼

createOrReplaceTempView

  /**
   * 使用給定名稱建立本地臨時檢視。此臨時檢視的生命週期與用於建立此資料集的 SparkSession 相關聯。
   *
   * @group basic
   * @since 2.0.0
   */
  def createOrReplaceTempView(viewName: String): Unit = withPlan {
    createTempViewCommand(viewName, replace = true, global = false)
  }

也就是說,當一下程式碼中spark stop(),之後 建立的臨時檢視表才失效

createGlobalTempView

/**
   * 使用給定名稱建立一個全域性臨時檢視。此臨時檢視的生命週期與此 Spark 應用程式相關聯。全域性臨時檢視是跨對談的。它的生命週期是 Spark 應用程式的生命週期,即當應用程式終止時它會被自動刪除。它與系統保留的資料庫 global_temp 相關聯,我們必須使用限定名稱來參照全域性臨時檢視,例如從 global_temp.view1 中選擇。
   *
   * @throws AnalysisException if the view name is invalid or already exists
   *
   * @group basic
   * @since 2.1.0
   */
  @throws[AnalysisException]
  def createGlobalTempView(viewName: String): Unit = withPlan {
    createTempViewCommand(viewName, replace = false, global = true)
  }

到此這篇關於Spark臨時表tempView的註冊/使用/登出/注意事項的文章就介紹到這了,更多相關Spark臨時表tempView內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com