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. reducerpublic
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 這個,可以設定在...