Hadoop数据类型
Hadoop的数据类型和我们Java将数据类型是一样的,只不过Hadoop重新封装了一些类型,这些类型和Java的包装类非常非常相似。
数据类型的转换
Hadoop类型 Java类型的转换
-> get
<- set
自定义数据类型
具体实现
(1)创建类实现WritableComparable或者Writable
(2)根据需要定义属性,生成get/set
(3)构造:空参,带参数
(4)序列化和反序列方法实现
(5)比较方法compareTo
(6)toString方法的实现
代码示例:
package com.usermapreducedemo;
import org.apache.hadoop.io.WritableComparable;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
public class UserTestWritable implements WritableComparable<UserTestWritable> {
//定义成员变量
private String firstKey;
private int secondKey;
public UserTestWritable() {
}
public UserTestWritable(String firstKey, int secondKey) {
this.firstKey = firstKey;
this.secondKey = secondKey;
}
//序列化:如何将一个对象进行存储
public void write(DataOutput out) throws IOException {
out.writeUTF( firstKey );
out.writeInt( secondKey );
}
//反序列化:如何将一个对象读取出来,读取数据的顺序和序列化保持一致
public void readFields(DataInput in) throws IOException {
this.firstKey = in.readUTF();
this.secondKey = in.readInt();
}
//比较方法
public int compareTo(UserTestWritable o) {
int comp = this.getFirstKey().compareTo( o.getFirstKey() );
if(comp ==0){
return Integer.valueOf( this.secondKey ).compareTo( Integer.valueOf( o.secondKey ) );
}
return comp;
}
public String getFirstKey() {
return firstKey;
}
public void setFirstKey(String firstKey) {
this.firstKey = firstKey;
}
public int getSecondKey() {
return secondKey;
}
public void setSecondKey(int secondKey) {
this.secondKey = secondKey;
}
@Override
public String toString() {
return firstKey + "--" + secondKey ;
}
}