2016-11-07 159 views
7

我有一個sql語句查詢是由許多領域做一個組。它使用的表格也很大(4TB大小)。我正在將表格註冊爲臨時表格。但是我不知道當我將它註冊爲臨時表時,該表是否被緩存?如果我將查詢轉換爲Scala函數(例如df.groupby()。aggr()...),而不是將它作爲sql語句,我也不知道它是否更高性能。對此有何幫助?registerTempTable是否會導致表被緩存?

回答

6

SQL是最有可能會以最快的速度遠遠Databricks blog

你嘗試分區/重新分區數據幀,以及看它是否可以提高性能?

關於registerTempTable:它只在Spark內部註冊表。您可以使用用戶界面進行檢查。

val test = List((1,2,3),(4,5,6)).toDF("bla","blb","blc") 
test.createOrReplaceTempView("test") 
test.show() 

存儲是空白

VS

val test = List((1,2,3),(4,5,6)).toDF("bla","blb","blc") 
test.createOrReplaceTempView("test").cache() 
test.show() 

enter image description here

通過registerTempTable在火花2.0棄用,通過

createOrReplac已被替換的方式eTempView

0

我有一個sql語句查詢是由許多字段做一個組。它使用的表格也很大(4TB大小)。我正在將表格註冊爲臨時表格。但是我不知道當我將它註冊爲臨時表時,該表是否被緩存?

除非使用cache()函數,否則registerTempTabele或createOrReplaceTempView不會將數據緩存到內存或光盤本身。

我也不知道它是否是更好的性能,如果將我的查詢到Scala的功能(例如df.groupby()。匯聚()...),而不是它的SQL語句。對此有何幫助?

請記住sql查詢中的sql術語最終會調用裏面的函數。所以無論你使用sql查詢條件還是代碼中可用的函數,都無關緊要。那是同樣的事情。

相關問題