Hadoop权威指南: 专有数据类型

时间:2023-09-27 14:29:08

Writable 和 WritableComparable接口

Writable接口

  • ** Writable接口的主要目的是,当数据在网络上传输或从硬盘读写时,提供数据的序列化和反序列化机智 **

  • ** 所有用作mapper或reducer输入或输出的数据类型都必须实现这个接口 **

Comparable接口

  • ** 用作键的数据有着更为严格的要求,除实现Writable接口之外,它必须实现标准Java中的Comparable接口 **
  • compare方法的返回值为-1(小于,<),0(=),1(大于>)
  • 作为一个方便使用的接口,Hadoop在org.apache.hadoop.io包里提供了一个WritableComparable接口,定义如下代码所示.
    public interface WritableComparable extends Writable, Comparable { }

wrapper类

** Hadoop提供了包装Java原始类型并实现了WritableComparable的类,它们被放置在org.apache.hadoop.io包下.这些包装类如下. **

原始包装类

** 这些类在概念上与原始包装类相似.它们保持一个原始值,该值既可以在创建类的时候创建,也可以通过setter方法设置
这些类有: **

  • BooleanWritable
  • ByteWritable
  • DoubleWritable
  • FloatWritable
  • IntWritable
  • LongWritable
  • VIntWritable(可变长度的整数类型)
  • VLongWritable(可变长度的长整数类型)

数组包装类

** 这些类为其他Writable对象数组提供了可写封装. ** 例如这些类的实例可以储存IntWritable类型的数组,却不能储存原始的整型(int)数组.** 这些类需要继承Writable类
这些类如下所示. **

  • ArrayWritable
  • TwoDArrayWritable

Map包装类

** 这些类允许使用java.util.Map接口作为键或者值,他们被定义为Map<Writable,Writable> 并有效管理部分内部运行时类型检查. ** 这就意味着弱化了编译类型检查
** 如下所示. **

  • AbstractMapWritable(这是其他具体的Writable map包装类的基类)
  • MapWritable(通用的map包装类,将Writable键映射为Writable值)
  • SortedMapWritable(MapWritable类的一个特殊实现,同时实现了SortedMap接口)