package org.dragon.hadoop.io;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Writable;
/**
* 自定义数据类型
* 通常情况下,实现一个静态方法read(DataInput),用以构造数据类型的实例对象,方法内部调用
* readFields(DataInput)方法。
* @author Administrator
*
*/
public class MyWritable implements Writable {
NullWritable in = null;
private int counter;
private long timestamp;
//无参的构造函数
public MyWritable(){
}
public MyWritable(int counter,long timestamp){
this.set(counter, timestamp);;
}
public static MyWritable read(DataInput in) throws IOException{
MyWritable myWritable = new MyWritable();
myWritable.readFields(in);
return myWritable;
}
public void set(int counter,long timestamp){
this.counter = counter;
this.timestamp = timestamp;
}
public int getCounter() {
return counter;
}
public long getTimestamp() {
return timestamp;
}
@Override
public void write(DataOutput out) throws IOException {
// TODO Auto-generated method stub
out.writeInt(counter);
out.writeLong(timestamp);
}
@Override
public void readFields(DataInput in) throws IOException {
// TODO Auto-generated method stub
this.counter = in.readInt();
this.timestamp = in.readLong();
}
@Override
public String toString() {
// TODO Auto-generated method stub
return this.counter + "\t" + this.timestamp;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + counter;
result = prime * result + (int) (timestamp ^ (timestamp >>> 32));
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
MyWritable other = (MyWritable) obj;
if (counter != other.counter)
return false;
if (timestamp != other.timestamp)
return false;
return true;
}
}
Hadoop 1.x自定义数据类型
最新推荐文章于 2024-05-05 21:21:43 发布