我们知道hadoop是由Java 编程写的。因此我们使用Java开发环境来操作HDFS,编写mapreduce也是很自然的事情。但是这里面hadoop却对Java数据类型进行了*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(大于)

 

    }

 

}

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-09-29
  • 2021-11-06
  • 2021-08-14
  • 2019-09-20
  • 2021-11-02
猜你喜欢
  • 2022-01-10
  • 2022-12-23
  • 2021-10-16
  • 2021-11-02
  • 2021-05-05
  • 2022-01-15
  • 2022-12-23
相关资源
相似解决方案