MapReduce練習之二次排序

2021-08-20 09:43:47 字數 1695 閱讀 2078

idea+hadoop 2.9.0 本地除錯

關於idea上hadoop的配置,見前文

輸入檔案格式如下,輸出以字母分割槽,分割槽內部排序,也可以不分割槽,按abc排序

劉備 15

關羽 60

張飛 8

劉備 75

關羽 65

張飛 98

劉備 55

劉備 23

關羽 85

張飛 67

張飛 58

輸出檔案按姓名分3個檔案儲存,格式為人名 分數公升序

劉備 15

劉備 23

劉備 55

劉備 75

public static void main(string args) throws ioexception, classnotfoundexception, interruptedexception
//輸入檔案為《偏移量,當前行字串》,輸出為《組合鍵類,分數》

static

class

semaper

extends

//將人名,分數寫入組合鍵作為map輸出key

sekey.setmkey(lines[0]+","+lines[1]);

//將分數寫入map輸出value

svalue.set(new integer(lines[1]));

context.write(sekey,svalue);

}}

static class sekey implements writable,writablecomparable

public

void

setmkey(string mkey)

//重寫compareto方法,自定義比較方法

@override

public

intcompareto(sekey o)

return res;

}//重寫write方法,實現組合鍵序列化

@override

public

void

write(dataoutput out) throws ioexception

//重寫readfields方法,實現組合鍵反序列化

@override

public

void

readfields(datainput in) throws ioexception

}

static

class

separt

extends

partitioner

else

if (sekey.getmkey().split(",")[0].equals("關羽")) else

}}

static

class

sereduceer

extends

reducer

rkey.set(skey.getmkey().split(",")[0]);

rvalue.set(buf.tostring());

context.write(rkey,rvalue);

}}

MapReduce二次排序

預設情況下,map輸出的結果會對key進行預設的排序,但個別需求要求對key排序的同時還需要對value進行排序 這時候就要用到二次排序了。本章以hadoop權威指南中計算每年最大氣溫值為例,原始資料雜亂無章 2008 33 2008 23 2008 43 2008 24 2008 25 2008 ...

Map reduce二次排序

map reduce的流程切面 splitmapperpartitioncombinergroupreducer 這裡要解釋下 partition 和 group 它們都是shuffle的重要步驟 的區別.他們的作用都是為了reducer分配記錄去處理.但區別是partition是把記錄分給不同的r...

mapreduce 二次排序

所謂二次排序,對第1個字段相同的資料,使用第2個字段進行排序。舉個例子,電商平台記錄了每一使用者的每一筆訂單的訂單金額,現在要求屬於同乙個使用者的所有訂單金額作排序,並且輸出的使用者名稱也要排序。賬戶訂單金額 hadoop apache 200hive apache 550yarn apache 5...