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

Hadoop中Writable和WritableComparable区别

Hadoop的key和value的传递序列化需要涉及两个重要的接口Writable和WritableComparable 1> Writable: Java代码 voi...
  • DPC27149
  • DPC27149
  • 2014年04月16日 22:10
  • 4501

Hadoop WritableComparable接口收集的知识

Hadoop WritableComparable接口
  • zmycoco2
  • zmycoco2
  • 2014年02月13日 14:04
  • 2278

hadoop WritableComparable与WritableComparator

WritableComparable是接口,继承了Writable,Comparable接口。 hadoop中很多对象实现了WritableComparable接口,例如IntWritable,Bo...
  • u011686226
  • u011686226
  • 2016年07月20日 09:03
  • 748

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

http://blog.csdn.net/u014432433/article/details/51104026 1. 在进行mapreduce编程时key键往往用于分组或排序,当我们在进行这些操作...
  • xj626852095
  • xj626852095
  • 2016年09月26日 23:50
  • 769

Hadoop 之 Writable , WritableComparable 接口

1.Writable 序列化时重要的接口,很多Hadoop中的数据类型都实现来这个接口,常见的有:FloatWritable ,DoubleWritable ,IntWritable ,LongWri...
  • andrewgb
  • andrewgb
  • 2015年10月26日 23:33
  • 331

Hadoop WritableComparable

WritableComparable用途是是为了确定是不是相同的key,因此得出如下结论: hadoop为Key的数据类型必须实现WritableComparable 如果以bean作为key...
  • qdqht2009
  • qdqht2009
  • 2016年05月09日 14:20
  • 401

从零开始最短路径学习Hadoop之04----Hadoop的I/O

《Hadoop权威指南》第2版本对Hadoop的I/O讲述内容甚多。对初学者来说,暂时不用使用太多技术。熟悉了主线,更多的细节查询手册即可得知。 1. 序列化     1.1 为什么序列化?...
  • u011539200
  • u011539200
  • 2013年07月30日 12:22
  • 1356

hadoop 自定义数据类型

1.Hadoop 内置的数据类型的介绍 Hadoop提供了如下内置的数据类型,这些数据类型都实现了WritableCamparable接口,以便用这些类型定义的数据可以被序列化进行网络传输和文件存...
  • sunshine_pb
  • sunshine_pb
  • 2014年09月18日 22:02
  • 645

Hadoop如何实现自定义的Writable

Hadoop自带一系列有用的Writable实现,可以满足绝大多数用途。但有时,我们需要编写自己的自定义实现。通过自定义Writable,我们能够完全控制二进制表示和排序顺序。Writable是Map...
  • wisgood
  • wisgood
  • 2013年04月13日 16:21
  • 2039

Hadoop mapreduce自定义排序WritableComparable

本文发表于本人博客。     今天继续写练习题,上次对分区稍微理解了一下,那根据那个步骤分区、排序、分组、规约来的话,今天应该是要写个排序有关的例子了,那好现在就开始!      说到排序...
  • qiezikuaichuan
  • qiezikuaichuan
  • 2015年06月18日 23:24
  • 347
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hadoop 之 WritableComparable 接口
举报原因:
原因补充:

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