Hadoop 之 WritableComparable 接口

原创 2015年07月10日 21:30:09

Writable接口:
它是一个实现了序列化协议的序列化对象。在Hadoop中定义一个结构化对象都要实现Writable接口,使得该结构化对象可以序列化为字节流,字节流也可以反序列化为结构化对象。

WritableComparable接口
WritableComparable接口是可序列化并且可比较的接口。MapReduce中所有的key值类型都必须实现这个接口,既然是可序列化的那就必须得实现readFiels()和write()这两个序列化和反序列化函数,既然也是可比较的那就必须得实现compareTo()函数,该函数即是比较和排序规则的实现。这样MR中的key值就既能可序列化又是可比较的。

一个实现了该接口的对象的列子:

public interface WritableComparable<T>
     extends Writable,Comparable<T>

A Writable which is also Comparable.

WritableComparables can be compared to each other, typically via Comparators. Any type which is to be used as a key in the Hadoop Map-Reduce framework should implement this interface.

Example:

     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 = this.first - o.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);
        }
    }
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

算法系列-大数据面试题-两个大文件中找出共同记录

1.题目描述 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?(假如每个url大小为10bytes) 2.思考过程 (1)首先我...

各国际会议的影响因子

转自:http://citeseer.ist.psu.edu/impact.html 这个是citeseer排的影响因子,包括conferences & journals Estimate...

Hadoop1.x MapReduce 实现二次排序 实现WritableComparable接口

一、前言利用MapReduce来实现,首先按照第一列升序排列,当第一列相同时,第二列升序排列 3 3 3 2 3 1 2 2 2 1 ...

Hadoop 之 Writable , WritableComparable 接口

1.Writable 序列化时重要的接口,很多Hadoop中的数据类型都实现来这个接口,常见的有:FloatWritable ,DoubleWritable ,IntWritable ,LongWri...

Hadoop自定义实现Writable/WritableComparable接口的类方法及应用

Hadoop自定义实现Writable/WritableComparable接口的类方法及应用 博主是刚刚踏入计算机领域的菜鸟,写博客更多的作用是备忘,如果有大牛们发现博客中有任何的错误缺漏,万望...

Hadoop WritableComparable接口收集的知识

Hadoop WritableComparable接口

Hadoop 实现WritableComparable的类

首先要了解hadoop的序列化 序列化(serialization): 序列化指的是将结构化对象转为字节流以便于通过网络进行传输或写入持久存储的过程。反序列化指的是将字节流转为一系列结构化...

hadoop自定义对象序列化Writable和WritableComparable

如果需要将自定义的bean放在value中传输,则实现Writable接口,自定义的bean实现 的接口应该是:public class FlowBean implements W...

Hadoop中Writable和WritableComparable区别

Hadoop的key和value的传递序列化需要涉及两个重要的接口Writable和WritableComparable 1> Writable: void write(DataOutput...

Hadoop——自定义数据类型,实现WritableComparable, 并且 分组,排序

http://blog.csdn.net/u014432433/article/details/51104026 1. 在进行mapreduce编程时key键往往用于分组或排序,当我们在进行这些操作...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hadoop 之 WritableComparable 接口
举报原因:
原因补充:

(最多只允许输入30个字)