hive的四個排序方法

2021-10-23 08:22:46 字數 936 閱讀 4190

order by 是要對輸出的結果進行全域性排序,這就意味著只有乙個reduce task時才能實現(多個reducer無法保證全域性有序)但是當資料量過大的時候,效率就很低,速度會很慢。可以指定公升序asc 降序desc

sort by 不是全域性排序,只保證了每個reduce task中資料按照指定欄位和排序方式有序排列,是區域性排序。排序列必須出現在select column列表中,reduce task 的數量可以通過 set mapred.reduce.tasks=[num] 來設定,當reducer task數量設定為1時,相當於order by排序

ps:一般不單獨使用

distribute by 指的是按照指定的字段進行劃分,將資料分到不同的輸出reduce task中,通常與sort by一起使用,使用時distribute by必須放在前面。資料通過hash演算法分到不同的task中。-----先分組再排序

分組個數由reduce個數決定,分組內有序,但是不能保證分組外有序,可以指定公升序還是降序

cluster by 可以看做是乙個特殊的distribute by+sort by,它具備二者的功能,但是只能實現正序排序的方式,不能指定排序方式。

hive排序函式四個by的總結

order by 全域性排序 乙個reducer,執行乙個job。total job 1,可以在執行日誌中看到 number of reucers 1.用在select語句的後面。sort by 分區內排序 每個reducer內部進行排序,對全域性結果集來說不是排序。隨機分割槽,防止資料傾斜。設定r...

hive中的四個by

全域性排序,只有乙個reduce 對每乙個reducer內部的資料進行排序,全域性結果集來說不是排序的,即只能保證每乙個reduce輸出的檔案中的資料是按照規定的字段進行排序的 insert overwrite local directory select from table name sort ...

Mapper的四個方法

1 protected void setup context context 一般用來載入一些初始化的工作,每個job執行一次 protected void setup context context throws ioexception,interruptedexception catch ioe...