zoukankan      html  css  js  c++  java
  • 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(大于)

        }

    }

  • 相关阅读:
    SPOJ 694 (后缀数组) Distinct Substrings
    POJ 2774 (后缀数组 最长公共字串) Long Long Message
    POJ 3693 (后缀数组) Maximum repetition substring
    POJ 3261 (后缀数组 二分) Milk Patterns
    UVa 1149 (贪心) Bin Packing
    UVa 12206 (字符串哈希) Stammering Aliens
    UVa 11210 (DFS) Chinese Mahjong
    UVa (BFS) The Monocycle
    UVa 11624 (BFS) Fire!
    HDU 3032 (Nim博弈变形) Nim or not Nim?
  • 原文地址:https://www.cnblogs.com/catWang/p/4367408.html
Copyright © 2011-2022 走看看