首页 > 代码库 > Hadoop-MapReduce之自定义数据类型
Hadoop-MapReduce之自定义数据类型
以下是自定义的一个数据类型,有两个属性,一个是名称,一个是开始点(可以理解为单词和单词的位置)
MR程序就不写了,请看WordCount程序。
package cn.genekang.hadoop.mr.RealignerTargetCreator;import java.io.DataInput;import java.io.DataOutput;import java.io.IOException;import org.apache.hadoop.io.WritableComparable;import org.apache.hadoop.io.WritableComparator;public class ReadBean implements WritableComparable<ReadBean> { /** * 自定义的一个数据类型。 * 此数据类型可以作为key,也可以作为value * 如果只作为value的话而且不需要排序的话可以继承自Writable接口。如果需要排序的话就必须实现WritableComparable接口 * 如果作为key的话,还必须要指定以什么作为key,或者说需要告诉shuffle,你的key值是怎么进行比较的。 * 以此,必须要定义一个Comparator的比较类,继承自 WritableComparator,而且要有定义key的比较器 * **/ private String locName; private int readStart; public ReadBean() { // TODO Auto-generated constructor stub } //必须重写此方法,将属性进行序列化处理 @Override public void write(DataOutput out) throws IOException { out.writeUTF(locName); out.writeInt(readStart); } //必须重写此方法,反序列化,得到属性的值 @Override public void readFields(DataInput in) throws IOException { this.locName = in.readUTF(); this.readStart = in.readInt(); } //此方法是重写Object类的,可以不重写 @Override public int hashCode() { return locName.hashCode() * 13 + readStart; } //要想对数据进行排序,必须重写此方法。1为升序,-1为降序,0为相等 @Override public int compareTo(ReadBean o) { if (this.locName.equals(o.getLocName())) { return this.readStart > o.readStart ? 1 : -1; } else { return this.locName.compareTo(o.locName) > 0 ? 1 : -1; } } //必须要重写,指明自定义数据类型的输出格式和输出内容 @Override public String toString() { return this.locName +"\t"+ this.readStart; } //可以不重写 public boolean equals(ReadBean o) { if (this.locName.equals(o.getLocName()) && this.readStart == o.getReadStart()) { return true; } return false; } //可以使用此方法为自定义数据类型赋值。 public void set(String name, int start) { this.locName = name; this.readStart = start; } public String getLocName() { return locName; } public void setLocName(String locName) { this.locName = locName; } public int getReadStart() { return readStart; } public void setReadStart(int readStart) { this.readStart = readStart; } //定义一个内部的比较类,实现key的比较方法 public static class Comparator extends WritableComparator { public Comparator() { super(ReadBean.class); // TODO Auto-generated constructor stub } @Override public int compare(byte[] arg0, int arg1, int arg2, byte[] arg3, int arg4, int arg5) { return compareBytes(arg0, arg1, arg2, arg3, arg4, arg5); } } //定义一个key的比较器 static { WritableComparator.define(ReadBean.class, new Comparator()); }}
Hadoop-MapReduce之自定义数据类型
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。