應用程式通過對鍵中的氣溫進行排序來找出最高氣溫

2021-07-05 13:05:49 字數 3020 閱讀 6006

public  class maxtemperatureusingsecondarysort  extends configured implements  tools{

private ncdcrecordparer parser = new ncdcrecordparser();

@override

protected void map(longwritable key, text value, context context) throws ioexception, interruptedexception{

parser.parse(value)

if(parser.iswalidtemperature()){

context.write(new intpair(parser.getyearint(), parser.getairtemperature()), nullwritable.get());

static class maxtemperaturereducer extends  reducer{

@ovrride

protected void reduce(intpair key, iterablevalues, context coontext) throws ioexception ,interruptedexception{

context.write(key, nullwritable.get());

public static  class firstpartitioner extends partitioner{

@override

public int getpartition(intpair key, nullwritable value, int numpartitions){

//multiply by 127 to perform some mixing

return math.abs(key.getfirst() * 127 )  % numpartitions;

public static class keycomparator extends writablecomparator{

protected keycomparator(){

supper(intpair.class, true);

@override

public int compare(writablecomparable w1,writab;lecomparable w2){

intpair ip1 =(intpair) w1;

intpair ip2 =(intpair) w2;

int cmp = intpair.compare(ip1.getfirst(), ip2.getfilrst());

if(cmp!=0)

return cmp

return  -intpair.compare(ip1.getsecond(), ip2.getseconde());

public  static class groupcomparator extends writablecomparator{

protected groupcomparator (){

super(intpair.class, true);

@ovrride

public int compare(writablecomparable w1, writablecomparable w2 ){

intpair ip1 =(intpair) w1;

intpair ip2 =(intpair) w2;

int cmp = intpair.compare(ip1.getfirst(), ip2.getfilrst());

if(cmp!=0)

return cmp

@override

public int run(string args){

job job = new job();

job.setpartitionerclass(firstpartitioner.class)

job.setsortcomparatorclass(keycomparator.class)

job.setgroupingcomparatorclass(groupcomparator.class)

job.setreducerclass(maxtemp (eraturereducer.class)

job.setoutputkeyclass(intpair.class);

job.setoutputvalueclass(nullwritable.class)

return  job.waitforcompletion(true0 ? 0:1;

,intpair於textpair類相似,後者可以傳遞text,由於可以根據各個reduce的組合件獲取最高氣溫

因此無需要在值上附加其他資訊, 使用nullwritable即可, 根據輔助排序, reduce輸出第乙個鍵就是包含年份和最高氣溫的資訊的intpair物件。

intpair的tostring()方法返滬iyige以製表符分割的字串,因而該陳旭輸出一組由製表符分割的年份、氣溫對

我們建立了乙個自定義的partitioner以按照組合鍵的首字段(年份)進行分割槽,即firstpartitioner

為了按照年份(公升序)和氣溫(降序)排列鍵,我們使用setsortcomparatorclass 設定了乙個自定義鍵 comparator(即keycomparator)

以抽取欄位並執行比較操作。類似的

為了按照年份對鍵進行分組,我們使用setgroupingcomparatorclass來自定義乙個分組comparator, 只取鍵的首字段進行比較。

執行這個程式 ,返回各年的最高氣溫

hadoop jar hadoop-examples.jar maxtemperatureusingsecondarysort input/ncdc/all    output-secondarysort

hadoop fs -cat output-secondarysort/part-* | sort | head

hadoop權威指南 page= 302

對你的的應用程式進行Debug

在visual studio中建立乙個新的silverlight project,並命名為 slclock.檢視 怎麼來建立乙個silverlight project 注意 將project 命名為 slclock 是很重要的,因為它必須與 中的命名符合,這樣才能正確的編譯.在visual stud...

對Windows桌面應用程式進行UI自動化測試

所謂ui自動化測試,就是模擬乙個使用者,對應用程式的ui進行操作,以完成特定場景的功能性整合測試。要完成ui自動化測試的大致步驟如下 你首先需要一台windows 10的pc 1,準備好待測試的windows桌面應用程式。4,編寫測試用例,執行測試。整個用例的編寫也相對簡單 1,使用desiredc...

打包好的應用程式進行實時更新

首先在解決方案下加個類庫 update 用以新增並引用到winform應用程式登入頁面中進行比較版本。softupdate.cs using system using system.collections.generic using system.linq using system.text usi...