您的位置:首页 > 运维架构

mapReduce排序 笔记

2014-09-05 11:28 183 查看
在 mymapper 中加入要排序的类

static class MyMapper extends Mapper<LongWritable, Text, NewK2, LongWritable>{
protected void map(LongWritable key, Text value, org.apache.hadoop.mapreduce.Mapper<LongWritable,Text,NewK2,LongWritable>.Context context) throws java.io.IOException ,InterruptedException {
final String[] splited = value.toString().split("\t");
final NewK2 k2 = new NewK2(Long.parseLong(splited[0]), Long.parseLong(splited[1]));
final LongWritable v2 = new LongWritable(Long.parseLong(splited[1]));
context.write(k2, v2);
};
}

  newk2 要继承 WritableComparable
static class  NewK2 implements WritableComparable<NewK2>{
        Long first;
        Long second;
        
        public NewK2(){}
        
        public NewK2(long first, long second){
            this.first = first;
            this.second = second;
        }
        
        
        @Override
        public void readFields(DataInput in) throws IOException {
            this.first = in.readLong();
            this.second = in.readLong();
        }

        @Override
        public void write(DataOutput out) throws IOException {
            out.writeLong(first);
            out.writeLong(second);
        }

        /**
         * 当k2进行排序时,会调用该方法.
         * 当第一列不同时,升序;当第一列相同时,第二列升序
         */
        @Override
        public int compareTo(NewK2 o) {
            final long minus = o.first - this.first;
            if(minus !=0){
                return (int)minus;
            }
            return (int)(this.second - o.second);
        }
        
        @Override
        public int hashCode() {
            return this.first.hashCode()+this.second.hashCode();
        }
        
        @Override
        public boolean equals(Object obj) {
            if(!(obj instanceof NewK2)){
                return false;
            }
            NewK2 oK2 = (NewK2)obj;
            return (this.first==oK2.first)&&(this.second==oK2.second);
        }
    }

问:为什么实现该类?

答:因为原来的v2不能参与排序,把原来的k2和v2封装到一个类中,作为新的k2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息