mapReduce分組

原始數據

1   1

2   1

2   2

3   1

3    2

3   3



// 分組
job.setGroupingComparatorClass(MyGroupingComparator.class);


要繼承 RowComparator

static class MyGroupingComparator implements RawComparator<NewK2>{

		@Override
		public int compare(NewK2 o1, NewK2 o2) {
			return (int)(o1.first - o2.first);
		}
		/**
		 * @param arg0 表示第一個參與比較的字節數組
		 * @param arg1 表示第一個參與比較的字節數組的起始位置
		 * @param arg2 表示第一個參與比較的字節數組的偏移量
		 * 
		 * @param arg3 表示第二個參與比較的字節數組
		 * @param arg4 表示第二個參與比較的字節數組的起始位置
		 * @param arg5 表示第二個參與比較的字節數組的偏移量
		 */
		@Override
		public int compare(byte[] arg0, int arg1, int arg2, byte[] arg3,
				int arg4, int arg5) {
			return WritableComparator.compareBytes(arg0, arg1, 8, arg3, arg4, 8);
		}
		
	}


假如是求分組後的最小值

	static class MyReducer extends Reducer<NewK2, LongWritable, LongWritable, LongWritable>{
		protected void reduce(NewK2 k2, java.lang.Iterable<LongWritable> v2s, org.apache.hadoop.mapreduce.Reducer<NewK2,LongWritable,LongWritable,LongWritable>.Context context) throws java.io.IOException ,InterruptedException {
			long min = Long.MAX_VALUE;
			for (LongWritable v2 : v2s) {
				if(v2.get()<min){
					min = v2.get();
				}
			}
			
			context.write(new LongWritable(k2.first), new LongWritable(min));
		};
	}


結果爲:

1 1

2 1

3  1


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章