欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2022年10月18日 09:12:21   作者:南風知我意丿  
transformation是根據(jù)原有RDD創(chuàng)建一個新的RDD,而action則把RDD操作后的結果返回給driver,這篇文章主要介紹了Spark臨時表tempView的注冊/使用/注銷/注意事項的相關資料,需要的朋友可以參考下

createTempView運作原理

先說一個眾人皆知的知識:
Spark中的算子包含transformation算子和action算子,transformation是根據(jù)原有RDD創(chuàng)建一個新的RDD,而action則把RDD操作后的結果返回給driver。Spark對transformation的抽象可以大大提高性能,這是因為在Spark中,所有transformation操作都是lazy模式,即Spark不會立即計算結果,而只是簡單地記住所有對數(shù)據(jù)集的轉換操作邏輯。這些轉換只有遇到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算子觸發(fā)之前,它并沒有什么實質性的運作,僅僅記錄了一個創(chuàng)建視圖的邏輯
Spark每次遇到action算子show()方法的時候,才開始真正計算,上面代碼中兩次用到視圖view1,那么意味著創(chuàng)建視圖的方法會執(zhí)行兩次,因此非常的耗時,所以需要對view1進行緩存處理。

緩存臨時表方式:

方式1 創(chuàng)建

// 創(chuàng)建它的SparkSession對象終止前有效
df.createOrReplaceTempView("tempViewName")  
// spark應用程序終止前有效
df.createOrReplaceGlobalTempView("tempViewName") 

注銷

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

方式2

創(chuàng)建

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

注銷

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

方式3

創(chuàng)建

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

注銷

commonDF.unpersist()

臨時表生命周期

源碼

createOrReplaceTempView

  /**
   * 使用給定名稱創(chuàng)建本地臨時視圖。此臨時視圖的生命周期與用于創(chuàng)建此數(shù)據(jù)集的 SparkSession 相關聯(lián)。
   *
   * @group basic
   * @since 2.0.0
   */
  def createOrReplaceTempView(viewName: String): Unit = withPlan {
    createTempViewCommand(viewName, replace = true, global = false)
  }

也就是說,當一下代碼中spark stop(),之后 創(chuàng)建的臨時視圖表才失效

createGlobalTempView

/**
   * 使用給定名稱創(chuàng)建一個全局臨時視圖。此臨時視圖的生命周期與此 Spark 應用程序相關聯(lián)。全局臨時視圖是跨會話的。它的生命周期是 Spark 應用程序的生命周期,即當應用程序終止時它會被自動刪除。它與系統(tǒng)保留的數(shù)據(jù)庫 global_temp 相關聯(lián),我們必須使用限定名稱來引用全局臨時視圖,例如從 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內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論