眾所周知,原生hive沒有計算中位數的函式(有的平台會有),只有計算分位數的函式percentile
在資料量不大的時候,速度尚可。但是資料量一上來之後,完全計算不出來。
那麼如何解決這個問題呢,我們可以使用 row_number() over()通過兩次排序來解決同時計算多個分位數,速度飛快。
比如我們需要計算mkt_mcc_storeidx表下以mkt_label,mccgroup,month分組,value_mccgroup的分位數
第一步:利用row_number() over()給value_mccgroup在分組裡排序,記錄下排名
第二步:計算mkt_label,mccgroup,month分組下的資料總數
第三步:join前兩步的結果,取rank=你需要計算的分位數字置,想計算多少個分位數就計算多少個
第四步:再排一次序,這次資料量就已經少了很多了,畢竟每組裡面只有幾個資料,記錄排名
第五步:得到具體的分位數
第六步:行轉成列,所有分位數計算完畢
後來檢視了下sql**的執行樹,發現percentile利用了map來存資料,怪不得這麼耗記憶體,其實時間久並不是算的時間久,是因為記憶體不夠了,系統一直在**記憶體
而rank over 僅僅就是個排序而已
如何解決頁面存在多個iframe的螢幕自適應問題
最近在專案中發現,無論怎麼設定自適應標籤似乎都不起效果,本以為是自己寫法上面的問題,為此頭痛了好幾天,不知道啥原因,最終在調節iframe中元素寬度時發現,原來在頁面存在多個iframe的情況下,media only screen and max width 1024px 似乎受到了iframe大小...
如何加快數模計算以及如何解決數模計算的收斂性問題
在了解收斂性之前,應該首先了解幾個基本概念 1 報告步 乙個數模作業包括多個報告步,報告步是使用者設定要求多長時間輸出 執行報告,比如可以每個月,每季度或每年輸出執行報告,執行報告包括產量報告 和動態場 重啟 報告。2 時間步 乙個報告步包括多個時間步,時間步是軟體自動設定,即通過多個時間步的計算來...
hive什麼情況下容易資料傾斜?如何解決?
傾斜原因 map輸出資料按key hash分配到reducer中,由於key分布不均勻 業務資料本身的特點 建表時考慮不周等原因造成reduce上的資料量差異過大。解決方法 1.對於key為空產生的資料傾斜可以對其賦予乙個隨機值。2.引數調節 設定資料傾斜時進行負載均衡。3.大小表join時,使用m...