(14) Hadoop MapReduce 自定义数据类型

网友投稿 290 2022-11-25

(14) Hadoop MapReduce 自定义数据类型

*  * 所有Mp数据类型 都要实现Writable (这个类中有2个方法  写  读 )  以便这些类定义的数据可以被序列化和存储  * Writeble接口中方法:  *  write() 是把每个数据对象序列化到输出流  *  readFields 是把输入流字节凡序列化  *   * 基本数据类型:  * // BooleanWritable 标准布尔型数据  // ByteWritable  单字节数据  // doubWritable  双字节数据  // FloatWritable  浮点数据  // IntWritable 整数型  // LongWritable  长整型数  // Text 使用UTF8格式存储的文本  // NullWritable 当 中的key或value为空时使用  *   *   * 排序:  *   依据key 进行比较  所以MR中 key的数据类型 不仅仅需要实现Writeble 还要实现Comparable接口  *          也就是直接继承WritableComparable 就可以     *   ** value的数据类型只需要继承Writeble  *   *   * 自定义数据对象的时候  (java的时候)  * 重写:toString  hashCode() equals() 方法  *   *   *   *   * */

例子:PairWritable.java

package com.my.hadoop.hadoophdfs.io; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import org.apache.hadoop.io.WritableComparable; public class PairWritable implements WritableComparable { /**  * user info *id *name  *   */ private int id; private String name; public PairWritable(){ } public PairWritable(int id,String name){ this.set(id, name); } public void set(int id,String name){ this.setId(id); this.setName(name); } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + id; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; PairWritable other = (PairWritable) obj; if (id != other.id) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } public String toString() { return id +"\t"+ name ; } public void write(DataOutput out) throws IOException { out.writeInt(id); out.writeUTF(name); } public void readFields(DataInput in) throws IOException {    //这里的读取顺序  跟write中设置顺序一定要  一致! 一致!  一致! this.id=in.readInt(); this.name = in.readUTF(); } public int compareTo(PairWritable o) { //先比较id int comp =Integer.valueOf(this.getId()).compareTo(o.getId()); if(0 != comp){ return comp; } //如果不相等  再比较name return this.getName().compareTo(o.getName()); } }

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SMT生产线的采集方式有哪几种,都有什么特点
下一篇:SA9904B芯片的性能特点及实现电力参数远程测控系统的设计
相关文章

 发表评论

暂时没有评论,来抢沙发吧~