對於spark sql中三種join方式的通俗總結

2021-09-24 04:45:27 字數 747 閱讀 3592

**spark中的三種join方式:

1、broadcast join:

適用於小表與大表的join,其中小表小於10m,本質上是去用空間換時間,

也就是將小表傳送到每個大表對應的節點上,然後依次去遍歷大表中的每個關聯鍵去和對應小表中的關聯鍵去匹配,找到相等的進行關聯,並不會走shuffle過程,因此最終的檔案數取決於block的個數,每個bolck是乙個邏輯上的概念,

生成的規則是在建表並落hdfs檔案的時候按256m去拆分,得到最終的檔案數。

2、shuffle hash join

適合於沒有特別小的兩個表進行關聯的時候,預設設定的shuffle partition的個數

是200,也就是分了200個區,然後兩張表的key值分別去基於200做hash取餘然後散步在每個區域中了,這樣的思想先把相近的合併在乙個區內,再在每個分區內去做比較key值的等值比較,就避免了大範圍的遍歷比較,節省了時間和記憶體。

3、sort merge join

這種適用於關聯的兩張表都特別大時,使用上述的兩種方法載入到記憶體的時候對於記憶體的壓力都非常大時,因此在2方法的基礎上,hash取餘之後還要分別對兩張表的key值進行排序,這樣去做等值比較的時候就不需要將某一方的全部資料都載入到記憶體進行計算了,只需要取一部分就能知道是否有相等的(比如按公升序排列,某個值明顯比它大了,後面肯定就不會有相等的,就不用繼續比較了,節省了時間和記憶體),也就是在進行等值比較的時候即用即丟的。這個方法在前面進行排序的時候可能會消耗點時間,但相對於後面的時間來說,總體是大大節省了時間。

hibernate中三種狀態

1.session的主要功能是提供對對映的實體類例項的建立,讀取和刪除操作。2.例項可能以下面三種狀態存在 自由狀態 transient 不曾進行持久化,未與任何session相關聯 持久化狀態 persistent 僅與乙個session相關聯 游離狀態 detached 已經進行過持久化,但當前...

iOS中三種定位方式

每個手機基站都有乙個識別符號,iphone或3g ipad可以蒐集周圍所有收到訊號的基站和它們的識別符號,通過聯網傳送到蘋果雲端伺服器,再由伺服器根據這些基站的的位置資訊查詢並計算出當前位置,然後返回給手機。因為基站訊號輻射範圍大,所以誤差也大,在500公尺 幾公里.定位速度最快,耗電最少,誤差幾百...

JVM中三種記憶體區域

1 棧 snack 先進後出,棧為每乙個方法分配乙個幀,當前呼叫的方法或區域性變數總是位於棧頂,當呼叫乙個方法時會開闢乙個新的幀並壓棧。當方法正常返回或者有異常退出時,會出棧。不可被多個執行緒共享 存放區域性變數 方法返回後區域性變數便被 放物件的引用 2 堆 heap 所有new出的物件 成員變數...