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(大于)

 

    }

 

}

 

转载于:https://www.cnblogs.com/catWang/p/4367408.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值