hadoop中的二次排序

2021-08-22 13:01:46 字數 2060 閱讀 8224

hadoop 中的另一種定製的排序手段就是二次排序(對value進行排序)

二次排序步驟如下

準備工作

對乙個文字中資料進行排序,找出每年的最高氣溫

public

void

makedata()

throws ioexception

fw.close()

;}

1. 自定義組合key(將key和value組合在一起)
/**

* 自定義組合key

*/public

class

combokey

implements

writablecomparable

public

void

setyear

(int year)

public

intgettemp()

public

void

settemp

(int temp)

/** * 對key進行比較實現

* > 年份公升序排列,氣溫降序排列

*/@override

public

intcompareto

(combokey o)

else

}/**

* 序列化過程

*/@override

public

void

write

(dataoutput out)

throws ioexception

@override

public

void

readfields

(datainput in)

throws ioexception

}

2. 自定義分割槽類,按照年份進行分割槽
/**

* map端執行:

* 自定義分割槽類

* > 將年份相同的分到同乙個區

*/public

class

yearpartitioner

extends

partitioner

}

3. 定義分組對比器,按照年份進行分組
/**

* 自定義對比器

* > 按照年份進行分組的對比器實現

*/public

class

yeargroupcomparator

extends

writablecomparator

public

intcompare

(writablecomparable a, writablecomparable b)

}

4. 定義key排序對比器
/**

* 排序對比器

*/public

class

combokeycomparator

extends

writablecomparator

public

intcompare

(writablecomparable a, writablecomparable b)

}

public

class

extends

}

6. reducer
public

class

maxtempreducer

extends

reducer

context.

write

(new

intwritable

(year)

,new

intwritable

(temp));

}}

7. 主函式
public

class

}

Spark中的二次排序

首先要先定義乙個自定義的型別,實現scala提供的ordered介面並實現其方法,方法就是排序的邏輯。這裡我對兩列數字進行排序,如下 package cn.spark.study.core class secondarysortkey val first int,val second int ext...

Spark的二次排序

1 資料樣本 1 52 4 3 61 3 2 11 14 2 45 4 11 3 23 5 12 6 13 2 排序規則 先按照第乙個字元排序,如果第乙個相同,再按照第二個字元排序 3 排序後的結果 1 31 5 1 14 2 12 4 2 45 3 63 23 4 11 5 12 6 13 4 s...

Hadoop Streaming二次排序

由於hadoop機器記憶體不足,所以需要把資料mapred進來跑。這樣,就需要,同乙個key下的輸入資料是有序的,即 對於keya的資料,要求data1先來,之後data2再來 所以需要對data進行二次排序。d stream.num.map.output.key.fields 2 這個,可以設定在...