全排序案例

FlowBean

public class FlowBean implements WritableComparable<FlowBean> {

? ? private long upFlow;? ? //上行流量

? ? private long downFlow;? //下行流量

? ? private long sumFlow;? //總流量

? ? public FlowBean() {

? ? ? ? super();

? ? }

? ? public FlowBean(long upFlow, long downFlow) {

? ? ? ? super();

? ? ? ? this.upFlow = upFlow;

? ? ? ? this.downFlow = downFlow;

? ? ? ? sumFlow = upFlow + downFlow;

? ? }

? ? //比較

? ? @Override

? ? public int compareTo(FlowBean bean) {

? ? ? ? int result;

? ? ? ? //核心比較條件判斷

? ? ? ? if (sumFlow > bean.getSumFlow()) {

? ? ? ? ? ? result = -1;

? ? ? ? } else if (sumFlow < bean.getSumFlow()) {

? ? ? ? ? ? result = 1;

? ? ? ? } else {

? ? ? ? ? ? result = 0;

? ? ? ? }

? ? ? ? return result;

? ? }

? ? //序列化

? ? @Override

? ? public void write(DataOutput out) throws IOException {

? ? ? ? out.writeLong(upFlow);

? ? ? ? out.writeLong(downFlow);

? ? ? ? out.writeLong(sumFlow);

? ? }

? ? //反序列化

? ? @Override

? ? public void readFields(DataInput in) throws IOException {

? ? ? ? upFlow = in.readLong();

? ? ? ? downFlow = in.readLong();

? ? ? ? sumFlow = in.readLong();

? ? }

? ? public long getUpFlow() {

? ? ? ? return upFlow;

? ? }

? ? public void setUpFlow(long upFlow) {

? ? ? ? this.upFlow = upFlow;

? ? }

? ? public long getDownFlow() {

? ? ? ? return downFlow;

? ? }

? ? public void setDownFlow(long downFlow) {

? ? ? ? this.downFlow = downFlow;

? ? }

? ? public long getSumFlow() {

? ? ? ? return sumFlow;

? ? }

? ? public void setSumFlow(long sumFlow) {

? ? ? ? this.sumFlow = sumFlow;

? ? }

? ? @Override

? ? public String toString() {

? ? ? ? return upFlow + "\t" + downFlow + "\t" + sumFlow;

? ? }

}


FlowCountSortMapper

public class FlowCountSortMapper extends Mapper<LongWritable, Text, FlowBean, Text> {

? ? FlowBean k = new FlowBean();

? ? Text v = new Text();

? ? @Override

? ? protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {

? ? ? ? // 1 獲取一行

? ? ? ? String line = value.toString();

? ? ? ? // 2 切割

? ? ? ? String[] fields = line.split("\t");

? ? ? ? // 3 封裝對(duì)象

? ? ? ? String phoneNum = fields[0];

? ? ? ? long upFlow = Long.parseLong(fields[1]);

? ? ? ? long downFlow = Long.parseLong(fields[2]);

? ? ? ? long sumFlow = Long.parseLong(fields[3]);

? ? ? ? k.setDownFlow(downFlow);

? ? ? ? k.setUpFlow(upFlow);

? ? ? ? k.setSumFlow(sumFlow);

? ? ? ? v.set(phoneNum);

? ? ? ? // 4 寫出

? ? ? ? context.write(k, v);

? ? }

}


FlowCountSortReducer

public class FlowCountSortReducer extends Reducer<FlowBean, Text, Text, FlowBean> {

? ? @Override

? ? protected void reduce(FlowBean key, Iterable<Text> values, Context context) throws IOException, InterruptedException {

? ? ? ? for (Text value:values) {

? ? ? ? ? ? context.write(value, key);

? ? ? ? }

? ? }

}

FlowCountSortDriver

public class FlowCountSortDriver {

? ? public static void main(String[] args) throws Exception {

? ? ? ? //輸入輸出路徑需要根據(jù)自己電腦上的實(shí)際的輸入輸出路徑設(shè)置

? ? ? ? args = new String[]{"e:/input/output1", "e:/output1"};

? ? ? ? // 1 獲取job對(duì)象

? ? ? ? Configuration configuration = new Configuration();

? ? ? ? Job job = Job.getInstance(configuration);

? ? ? ? // 6 設(shè)置jar包存儲(chǔ)位置 關(guān)聯(lián)自定義的mapper和reducer

? ? ? ? job.setJarByClass(FlowCountSortDriver.class);

? ? ? ? // 2 指定本業(yè)務(wù)job要使用的mapper/Reducer業(yè)務(wù)類

? ? ? ? job.setMapperClass(FlowCountSortMapper.class);

? ? ? ? job.setReducerClass(FlowCountSortReducer.class);

? ? ? ? // 3 指定mapper輸出數(shù)據(jù)的kv類型

? ? ? ? job.setMapOutputKeyClass(FlowBean.class);

? ? ? ? job.setMapOutputValueClass(Text.class);

? ? ? ? // 4 指定最終輸出的數(shù)據(jù)的kv類型

? ? ? ? job.setOutputKeyClass(Text.class);

? ? ? ? job.setMapOutputValueClass(FlowBean.class);

? ? ? ? // 5 指定job的輸入原始文件類型

? ? ? ? FileInputFormat.setInputPaths(job, new Path(args[0]));

? ? ? ? FileOutputFormat.setOutputPath(job, new Path(args[1]));

? ? ? ? // 6 提交job

? ? ? ? boolean result = job.waitForCompletion(true);

? ? ? ? System.exit(result ? 0 : 1);

? ? }

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末构订,一起剝皮案震驚了整個(gè)濱河市侮叮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌悼瘾,老刑警劉巖囊榜,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異亥宿,居然都是意外死亡卸勺,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門箩绍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)孔庭,“玉大人,你說(shuō)我怎么就攤上這事材蛛。” “怎么了怎抛?”我有些...
    開(kāi)封第一講書人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵卑吭,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我马绝,道長(zhǎng)豆赏,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任富稻,我火速辦了婚禮掷邦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘椭赋。我一直安慰自己抚岗,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布哪怔。 她就那樣靜靜地躺著宣蔚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪认境。 梳的紋絲不亂的頭發(fā)上胚委,一...
    開(kāi)封第一講書人閱讀 49,985評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音叉信,去河邊找鬼亩冬。 笑死,一個(gè)胖子當(dāng)著我的面吹牛硼身,可吹牛的內(nèi)容都是我干的硅急。 我是一名探鬼主播枢冤,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼铜秆!你這毒婦竟也來(lái)了淹真?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤连茧,失蹤者是張志新(化名)和其女友劉穎核蘸,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體啸驯,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡客扎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了罚斗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片徙鱼。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖针姿,靈堂內(nèi)的尸體忽然破棺而出袱吆,到底是詐尸還是另有隱情,我是刑警寧澤距淫,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布绞绒,位于F島的核電站,受9級(jí)特大地震影響榕暇,放射性物質(zhì)發(fā)生泄漏蓬衡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一彤枢、第九天 我趴在偏房一處隱蔽的房頂上張望狰晚。 院中可真熱鬧,春花似錦缴啡、人聲如沸壁晒。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)讨衣。三九已至,卻和暖如春式镐,著一層夾襖步出監(jiān)牢的瞬間反镇,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工娘汞, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留歹茶,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像惊豺,于是被迫代替她去往敵國(guó)和親燎孟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容