【笔记】序列化、Writable、comparable、WritableComparable
来源:互联网 发布:外国人中国菜知乎 编辑:程序博客网 时间:2024/05/21 00:16
序列化
将对象(文件)的状态信息转换成可存储的字节序列的过程。反过来就是反序列化。hadoop中的所有key/value都必须实现以下接口。
Writable 接口
public interface Writable{ //将对象状态信息写入二进制的DataOutput流(序列化) void write(DataOutput out) throws IOException; //从二进制的DataInput流中读取对象状态(反序列化) void readFields(DataInput in) throws IOException;}
对特定的Writable可以进行赋值和取值操作(以IntWritable为例)
IntWritable value = new IntWritable();value.set(5567);//用set()方法赋值/***IntWritable value = new IntWritable(5567);//或者用构造方法赋值***/int result = value.get();//通过get()方法取值
Comparable接口
实现了Comparable的对象可以和自身相同类型的对象比较大小
public interface Comparable{ //将T对象和对象o进行比较,约定:返回负数为小于,零为大于,整数为大于 public int compareTo(T O);}
WritableComparable
所有的key必须实现Comparable接口,value只用实现Writable接口。在MapReduce过程中需要对Key/Value对进行反复的排序。默认情况下依据Key进行排序的,要实现comparaTo()方法。所以通过Key既要实现Writable接口又要实现Comparable接口,把两个接口合为一个公共接口WritableComparable。
自定义一个WritableCpmparable类型的Example
public class TextPair implements WritableComparable { private Text first;//Text 类型的实例对象 private Text second; public TextPair() { set(newText(),newText()); } public TextPair(String first, String second) { set(new Text(first),new Text(second)); } public TextPair(Text first, Text second) { set(first, second); } public void set(Text first, Text second) { this.first = first; this.second = second; } public Text getFirst() { return first; } public Text getSecond() { return second; } //序列化 @Override public void write(DataOutput out)throwsIOException { first.write(out); second.write(out); } /** 在排序之前,需要先从磁盘中读取数据进行反序列化成对象,然后在内存中对反序列化的对象进行比较。 */ //反序列化 @Override public void readFields(DataInput in)throwsIOException { first.readFields(in); second.readFields(in); } //返回哈希值 @Override public int hashCode() { return first.hashCode() *163+ second.hashCode(); } @Override public boolean equals(Object o) { //判定o是否与TextPair同等类型 if(o instanceof TextPair) { TextPair tp = (TextPair) o; return first.equals(tp.first) && second.equals(tp.second); } return false; } @Override publicString toString() { return first +"\t"+ second; } //排序 @Override public int compareTo(TextPair tp) { int cmp = first.compareTo(tp.first); if(cmp !=0) { return cmp; } return second.compareTo(tp.second); }}
阅读全文
0 0
- 【笔记】序列化、Writable、comparable、WritableComparable
- hadoop自定义对象序列化Writable和WritableComparable
- Hadoop 之 Writable , WritableComparable 接口
- hadoop的WritableComparable与Writable
- Writable接口 与 WritableComparable接口
- Hadoop中Writable和WritableComparable区别
- Hadoop中Writable和WritableComparable区别
- Hadoop中Writable和WritableComparable区别
- Hadoop中Writable和WritableComparable区别
- Hadoop中Writable和WritableComparable区别
- 序列化与Writable实现
- 序列化与Writable接口
- hadoop之Writable序列化
- Hadoop阅读笔记——洞悉Hadoop序列化机制Writable
- hadoop序列化与Writable接口
- Hadoop序列化与Writable源码分析
- Hadoop(10) 序列化--Writable 类
- Hadoop 的Writable序列化接口
- spring中parent属性解析
- PHP代码审计实战之MetInfo CMS
- 10.26 特殊权限set_uid,set_gid,stick_bit,软链接文件,硬连接文件
- 46. Permutations
- Servlet登录实例(二)
- 【笔记】序列化、Writable、comparable、WritableComparable
- 活动——在活动中使用Toast
- 数组中常见的两个异常
- POJ 3020.Antenna Placement
- Brouncy Castle类库
- Oracle之hints分类
- ConcurrentHashMap1.7和1.8
- PHP中测试in_array、isset、array_key_exists性能
- 阿里cloud activemq