咖啡猫

导航

Hadoop数据类型介绍

我们知道hadoop是由Java 编程写的。因此我们使用Java开发环境来操作HDFS,编写mapreduce也是很自然的事情。但是这里面hadoop却对Java数据类型进行了包装,那么hadoop的数据类型与Java那些数据类型对应。下面做一些对比:

一、 Hadoop数据类型介绍:

(1)在hadoop.io包,主要分为基本类型和其它类型。


(2)基本类型(hadoop:java):
数据类型                      hadoop数据类型:                                   Java数据类型


   布尔型                      *BooleanWritable                                           boolean    
   整型                         *IntWritable:                                                   int
   浮点float                   *FloatWritable:                                                float
   浮点型double            *DoubleWritable:                                            double
   整数类型byte           *ByteWritable:                                                byte
这里说明一下,hadoop数据库类型与Java数据类型之间如何转换:
有两种方式
1.通过set方式
2.通过new的方式。


(3)其它(部分):
*Text:hadoop:中对应Java数据类型string
*ArrayWritable:  中对应Java数据类型数组。

 

二. 用户自定义数据类型的实现

 

     1.继承接口Writable,实现其方法write()和readFields(), 以便该数据能被序列化后完成网络传输或文件输入/输出;

 

     2.如果该数据需要作为主键key使用,或需要比较数值大小时,则需要实现WritalbeComparable接口,实现其方法write(),readFields(),CompareTo() 。

 

public class Point3D implements Writable<Point3D>

 

{

 

    private float x,y,z;

 

    public float getX(){return x;}

 

    public float getY(){return y;}

 

    public float getZ(){return z;}

 

 

 

    public void readFields(DataInput in) throws IOException

 

    {

 

        x = in.readFloat();

 

        y = in.readFloat();

 

        z = in.readFloat();

 

    }

 

 

 

    public void write(DataOutput out) throws IOException

 

    {

 

         out.writeFloat(x);

 

         out.writeFloat(y);

 

         out.writeFloat(z);

 

    }

 

}

 

 

 

 

 

 

 

public class Point3D implements WritableComparable<Point3D>

 

{

 

    private float x,y,z;

 

    public float getX(){return x;}

 

    public float getY(){return y;}

 

    public float getZ(){return z;}

 

 

 

    public void readFields(DataInput in) throws IOException

 

    {

 

        x = in.readFloat();

 

        y = in.readFloat();

 

        z = in.readFloat();

 

    }

 

 

 

    public void write(DataOutput out) throws IOException

 

    {

 

         out.writeFloat(x);

 

         out.writeFloat(y);

 

         out.writeFloat(z);

 

    }

 

 

 

    public int CompareTo(Point3D p)

 

    {

 

        //具体实现比较当前的空间坐标点this(x,y,z)与指定的点p(x,y,z)的大小

 

        // 并输出: -1(小于), 0(等于), 1(大于)

 

    }

 

}

 

posted on 2015-03-25 23:43  咖啡猫1292  阅读(1641)  评论(0编辑  收藏  举报