一種基於有序序列mapjoin的方法

2021-06-07 10:04:43 字數 583 閱讀 7953

在解決資料傾斜問題時,我們經常會採用一種方式:mapjoin,按照hive的實現,mapjoin是將其中一張表在map的過程中載入到記憶體中,但是如果在join的表中,最小的表的資料量也不小的情況下。我們該怎麼辦呢?其中一種解決的方式是:將兩張表需要實現排序(直接用hadoop解決),如下,兩張表都是有序的。

我們以以上兩個表為例,以上兩個表都是有序的,那麼我們在遍歷的時候,會首先從表1中抽取乙個key,與表2中的key進行對比,如果找到相應的key,我們就會將兩個表的指標下移,如下圖:

在下次查詢的時候,表2將從指標處進行查詢,因為兩個表都是有序的,所以我們不會遺漏掉key。同時,如果我們發現,當在表1中的key在表2中找到乙個比自身大的key,這個時候都沒有找到和自身相同的key,那說明在表2中根本不存在相同的key,這個規則也是由兩個表都是有序保證的。至此,就可以實現在兩個表都比較大的情況下,也可以實現mapjoin了。

有序陣列的一種實現

你可以去 github 上檢視全部 但下面會有更多講解。實現部分很直觀,因為把所有東西都橋接到用來實際儲存的陣列那裡。由於 index 是 int 型別,你甚至不用自己實現index offsetby 和distance from to 函式,標準庫已經提供了預設的實現。let sorted sor...

一種基於富文案顯示設計

概述 一般複雜互動的系統會存在著大量的文案顯示,這樣可以告訴使用者的互動行為,主要用來作提示和操作區分,但是由於不同的點使用的文案根據具體的位置,呼叫方產生不同的文案,導致資訊的顯示往往會出現各個不同的顯示方式。概念 使用場景 1.頁面和 的互動 2.介面和呼叫方的互動 文字型別 1.純文字 2.富...

一種基於富文案顯示設計

概述 一般複雜互動的系統會存在著大量的文案顯示,這樣可以告訴使用者的互動行為,主要用來作提示和操作區分,但是由於不同的點使用的文案根據具體的位置,呼叫方產生不同的文案,導致資訊的顯示往往會出現各個不同的顯示方式。概念 使用場景 1.頁面和 的互動 2.介面和呼叫方的互動 文字型別 1.純文字 2.富...