1. 程式人生 > >Hadoop 中自定義倒序排序 demo

Hadoop 中自定義倒序排序 demo

SortMR

package cn.itcast.hadoop.mr.flowsort;

import java.io.IOException;

import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import cn.itcast.hadoop.mr.flowsum.FlowBean;

public class SortMR {

	public static class SortMapper extends Mapper<LongWritable, Text, FlowBean, NullWritable> {

		// 拿到一行資料,切分出各欄位,封裝為一個 flowbean ,作為 key 輸出
		@Override
		protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {

			String line = value.toString();

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

			String phoneNB = fields[0];
			long u_flow = Long.parseLong(fields[1]);
			long d_flow = Long.parseLong(fields[2]);

			context.write(new FlowBean(phoneNB, u_flow, d_flow), NullWritable.get());//map 所有資料快取起來,排完序,再給 reduce 。

		}

	}

	public static class SortReducer extends Reducer<FlowBean, NullWritable, Text, FlowBean> {

		@Override
		protected void reduce(FlowBean key, Iterable<NullWritable> values, Context context)
				throws IOException, InterruptedException {

			String phoneNB = key.getPhoneNB();
			context.write(new Text(phoneNB), key);

		}

	}

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

		Configuration conf = new Configuration();
		Job job = Job.getInstance(conf);

		job.setJarByClass(SortMR.class);

		job.setMapperClass(SortMapper.class);
		job.setReducerClass(SortReducer.class);

		job.setMapOutputKeyClass(FlowBean.class);
		job.setMapOutputValueClass(NullWritable.class);

		job.setOutputKeyClass(Text.class);
		job.setOutputValueClass(FlowBean.class);

		FileInputFormat.setInputPaths(job, new Path(args[0]));
		FileOutputFormat.setOutputPath(job, new Path(args[1]));

		System.exit(job.waitForCompletion(true) ? 0 : 1);

	}

}

打包成一個  jar  包

輸出命令、結果:

相關推薦

Hadoop 定義排序 demo

SortMR package cn.itcast.hadoop.mr.flowsort; import java.io.IOException; import org.apache.commons.lang.StringUtils; import org.apache.hadoop.con

ht-7 對arrayList定義對象排序

new 字符 pack add string類 oid imp 靜態方法 一個 1 package com.iotek.set; 2 3 import java.util.ArrayList; 4 import java.util.Collections;

將list集合按照某個欄位排序(從大到小),然後將list的物件

需求: 查詢資料庫的到多條據,將每一行資料相加求和,得到sum,在jsp中跟據sum總和排序。 首先,我是用Page<Analysis> page  去接受返回值,在controller層進行資料處理。List<Analysis> list  =

MR定義bean作為key,輸出某組排序最大值。

目錄 需求:MR中自定義bean作為key,輸出某組排序中最大值。 方案:重寫MR中groupingcomparator方法 1.需求:MR中自定義bean作為key,輸出某組排序中最大值。    場景:求出多個訂單中,金額最大的商品價格。 2.方

Extjs4的Gridrownumberer排序

Extjs4的Grid是最常用的控制元件,序號我們一般使用如下程式碼: columns:[ { text:"序號", xtype: 'rownumberer', width:40   } ] 這樣是1、2、3、4、5....順序展示 如何倒

Hadoop之MapReduce定義二次排序流程例項詳解

一、概述 MapReduce框架對處理結果的輸出會根據key值進行預設的排序,這個預設排序可以滿足一部分需求,但是也是十分有限的。在我們實際的需求當中,往往有要對reduce輸出結果進行二次排序的需求。對於二次排序的實現,網路上已經有很多人分享過了,但是對二次排序的實現的

淺析在QtWidget定義Model(beginInsertRows()和endInsertRows()是空架子,類似於一種信號,用來通知底層)

cti ron 初學者 開發 http 沒有 insert ati 學習 Qt 4推出了一組新的item view類,它們使用model/view結構來管理數據與表示層的關系。這種結構帶來的功能上的分離給了開發人員更大的彈性來定制數據項的表示,它也提供一個標準的model接

Python編程定義Lambda函數的使用場景

list str pre net 代碼 接收 n) app image Python 中定義函數有兩種方法,一種是用常規方式 def 定義,函數要指定名字,第二種是用 lambda 定義,不需要指定名字,稱為 Lambda 函數。 Lambda 函數又稱匿名函數,匿名函數

Laravel5.4定義404等錯誤頁面

dtd app top exc auto get 1.0 存在 href 1.在resources/views/下簡歷文件夾error,在error文件中建立"404.blade.php文件"。    1 <!DOCTYPE html PUBLIC "-//W3C

c#(winform)定義ListItem類方便ComboBox添加Item項

urn left over string his 定義 return box item 1.定義ListItem類 public class ListItem { private string _key = string.Empty;

javaScript定義sort的比較函數,用於比較字符串長度,數值大小

var cti lin family 字符串長度 tr1 個數 new fun var arr = [‘aa‘, 23, 1.2, ‘bb‘, ‘cc‘]; var len = arr.length; // for (var i = 0; i < len; i++)

ZBrush 4R7定義筆刷

信息 com 如果 功能 軟件版本 簡單 分享 按鈕 使用 為了便於雕刻,ZBrush?很人性化地設計了自定義筆刷。隨著ZBrush軟件版本不斷更新,功能也在不斷完善。只是在筆刷面板ZBrush軟件就為用戶提供了上百種之多,如果我們想要用某種筆刷,一個個找起來是不是很麻煩,

1 .net定義事件的步驟

sender soc size etc utf nbsp 並且 ram void 1 申明一個自定義的類並且繼承事件的基類 public class ClientSocketModelConnectedEvent:EventArgs { priv

jqGrid細節備註—jqGrid定義格式,URL格式

cto cti 函數名 pan sortable mod 51cto show 對象 本文來自:http://cnn237111.blog.51cto.com/2359144/782137 jqGrid中自定義格式,URL格式 當官方自帶的showlink用起來不是十分

gecode定義brancher

size 方式 val mit share pro clu assign rtu 實際應用中,往往要比官方的示例復雜很多,這裏對變量的選擇等往往需要以自定義的方式進行選擇,這個時候就需要自定義brancher,相關註釋在代碼中 #include <gecode/in

Django定義過濾器的使用

sof html views charset 展示 set etag 很多 back 我在這裏做的是: 從數據庫查出id遞增的一些信息,展示在前臺。 編寫一個過濾器判斷查出數據的id是偶數的返回True 奇數返回False 1 創建項目,創建應用,註冊應用,配置

6.1 如何在spring定義xml標簽

關聯 tex and 啟動流程 調用 mls ram 如果 .com dubbo自定義了很多xml標簽,例如<dubbo:application>,那麽這些自定義標簽是怎麽與spring結合起來的呢?我們先看一個簡單的例子。 一 編寫模型類 1 packa

VC2010定義消息

mfc 自定義消息 VC中自定義消息步驟如下:1、打開類向導,添加自定義消息,如下圖:點擊“確定”,“確定”關閉向導。2、在窗口頭文件中,添加消息常量#define WM_MYMESSAGE WM_USER + 101頭文件中由向導自動產生消息映射函數protected:afx_msg LRESULT

laravel定義日誌目錄

laravel log今天應客戶要求,需要對項目日誌進行指定位置保存,查看源碼時,發現logpservicerovider已經被寫死在框架中了。顯然直接修改logserviceprovider是不好的。於是研究了一大早上,最後經公司大神指點,寫在appserviceprovider裏的register()方法

list<定義類>排序方法

實現 onerror var div lis rabl bsp 邏輯 int 類實現接口IComparable //實現接口的自定義類 //此接口規定了一個返回類型int的方法, //public int CompareTo(object obj) //返回1時thi