Hadoop Hive 中幾種排序方法的區別與比較

2021-06-19 14:19:29 字數 1372 閱讀 9669

hive 中 order by, sort by ,dristribute by,cluster by 的作用和用法

1. order by

set hive.mapred.mode=nonstrict; (default value / 預設值)

set hive.mapred.mode=strict;

order by 和資料庫中的order by 功能一致,按照某一項 & 幾項 排序輸出。

與資料庫中 order by 的區別在於在hive.mapred.mode = strict 模式下 必須指定 limit 否則執行會報錯。

hive> select * from test order by id;     

failed: error in semantic analysis: 1:28 in strict mode, if order by is specified, limit must also be specified. error encountered near token 'id'

原因: 在order by 狀態下所有資料會到一台伺服器進行reduce操作也即只有乙個reduce,如果在資料量大的情況下會出現無法輸出結果的情況,如果進行 limit n ,那只有  n * map number 條記錄而已。只有乙個reduce也可以處理過來。

2. sort by

sort by 不受 hive.mapred.mode 是否為strict ,nostrict 的影響

sort by 的資料只能保證在同一reduce中的資料可以按指定字段排序。

使用sort by 你可以指定執行的reduce 個數 (set mapred.reduce.tasks=) 這樣可以輸出更多的資料。

對輸出的資料再執行歸併排序,即可以得到全部結果。

注意:可以用limit子句大大減少資料量。使用limit n後,傳輸到reduce端(單機)的資料記錄數就減少到n* (map個數)。否則由於資料過大可能出不了結果。

3. distribute by

按照指定的字段對資料進行劃分到不同的輸出reduce  / 檔案中。

insert overwrite local directory '/home/hadoop/out' select * from test order by name distribute by length(name);  

此方法會根據name的長度劃分到不同的reduce中,最終輸出到不同的檔案中。 

length 是內建函式,也可以指定其他的函式或這使用自定義函式。

4. cluster by

cluster by 除了具有 distribute by 的功能外還兼具 sort by 的功能。 

倒序排序,且不能指定排序規則。 asc  或者 desc。

js陣列中的幾種排序

每輪依次比較相鄰兩個數的大小,後面比前面小則交換 var b 0 設定用來儲存調換位置的值 var a 1,9,33,2,5,34,23,98,14 氣泡排序 for var i 0 i i console.log a 1,2,5,9,14,23,33,34,98 function sortnumb...

mysql 幾種排序 MySql的幾種排序方式

資料排序的情況很常見,今天介紹一下mysql的幾種排序方式,是我最近有使用到的,希望能對大家有所幫助。這裡先建立一張普通的表,create table test1 id bigint 20 not null auto increment,name varchar 50 not null,date t...

Objective C中陣列排序幾種情況的總結

大體上,oc中常用的陣列排序有以下幾種方法 sortedarrayusingselector sortedarrayusingcomparator sortedarrayusingdescriptors 1 簡單排序 sortedarrayusingselector 如果只是對字串的排序,可以利用s...