Hadoop的MapReduce作业都是对key/value空间进行处理,从一个键值对空间映射到另一个键值对空间。具体来讲就是
    (输入) <k1, v1> -> map -> <k2, v2> -> combine -> <k2, v2> -> reduce -> <k3,v3> (输出)

Hadoop中的key/value的类型都必须要实现Writable接口,其中key的类型由于要进行排序,还要实现额外的Comparable接口。

Hadoop对Java的基本类型大都进行了封装,如使用得最多的Text,IntWritable,LongWritable等,所有封装都包含get和set方法用于读取和设置封装的值。Hadoop也对Array,Map,SortedMap提供了封装。
    这些实现对于一般应用基本使用Hadoop提供的基本类型已经足以应付,但是对于某些特定应用,可能我们需要构造自己的key/value类型,下面的例子实现了WritableComparable接口,WritableComparable其实就是Writable接口和Comparable接口。其中内部的Comparator类允许直接比较数据流中的记录,而不需要把数据流反序列化为对象,这样就避免了新建对象的额外开销。

public static class IntPair implements WritableComparable<IntPair> {private int first = 0;private int second = 0;public void set(int left, int right) {first = left;second = right;}public int getFirst() {return first;}public int getSecond() {return second;}@Overridepublic void readFields(DataInput in) throws IOException {first = in.readInt() + Integer.MIN_VALUE;second = in.readInt() + Integer.MIN_VALUE;}@Overridepublic void write(DataOutput out) throws IOException {out.writeInt(first - Integer.MIN_VALUE);out.writeInt(second - Integer.MIN_VALUE);}@Overridepublic int hashCode() {return first * 157 + second;}@Overridepublic boolean equals(Object right) {if (right instanceof IntPair) {IntPair r = (IntPair) right;return r.first == first && r.second == second;} else {return false;}}public static class Comparator extends WritableComparator {public Comparator() {super(IntPair.class);}public int compare(byte[] b1, int s1, int l1,byte[] b2, int s2, int l2) {return compareBytes(b1, s1, l1, b2, s2, l2);}}static {WritableComparator.define(IntPair.class, new Comparator());}@Overridepublic int compareTo(IntPair o) {if (first != o.first) {return first < o.first ? -1 : 1;} else if (second != o.second) {return second < o.second ? -1 : 1;} else {return 0;}}}

定义好自己的类型后就可以像Hadoop内置的类型一样在MapReduce作业中使用了。

转载于:https://www.cnblogs.com/flyingwhitepig/archive/2012/11/12/5874092.html

一步一步学习hadoop(七)相关推荐

  1. 一步一步跟我学习hadoop(5)----hadoop Map/Reduce教程(2)

    Map/Reduce用户界面 本节为用户採用框架要面对的各个环节提供了具体的描写叙述,旨在与帮助用户对实现.配置和调优进行具体的设置.然而,开发时候还是要相应着API进行相关操作. 首先我们须要了解M ...

  2. GitChat · 大数据 | 一步一步学习大数据:Hadoop 生态系统与场景

    目录(?)[-] Hadoop概要 Hadoop相关组件介绍 HDFS Yarn Hive HBase Spark Other Tools Hadoop集群硬件和拓扑规划 硬件配置 软件配置 Hado ...

  3. 强化学习(七):n步自举法(多步引导法)

    强化学习(七):n步自举法(多步引导法)   在之前,我们知道求解有限马尔可夫决策过程可以通过蒙特卡洛和时序差分来通过与环境多次交互从经验中学习,然而,蒙特卡洛方法在一些不满足分幕式任务或连续型任务上 ...

  4. 一步一步学习iOS 5编程(第三版)-PDF中文版-正式发布!

    目前,这是第一本介绍iOS 5.x 和 Xcode 4.4 的中文版书籍,尤其适合于iOS 编程开发初学者.本教程由 EntLib.com 团队编写.如有任何技术问题,欢迎留言. 电子版 – PDF ...

  5. 一步一步学习iOS 摘记

    本文参考<一步一步学习iOS6编程>书籍, 下载链接: http://download.csdn.net/detail/u012605629/8788505 第一部分:Hello Worl ...

  6. 【深度学习基础】一步一步讲解卷积神经网络

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送 本文转自:一步一步讲解卷积神经网络 卷积神经网络(Convoluti ...

  7. 通过脚本案例学习shell(五) 通过创建DNS脚本一步一步教你将一个普通脚本规范到一个生产环境脚本...

    通过脚本案例学习shell(五) 通过创建DNS脚本一步一步教你将一个普通脚本规范到一个生产环境脚本   版权声明: 本文遵循"署名非商业性使用相同方式共享 2.5 中国大陆"协议 ...

  8. 一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序 - 强烈推荐!!!

    一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序 本文根据<Professional ASP.NET MVC 1.0>中微软牛人Scott Guthrie 提供 ...

  9. 如何一步一步用DDD设计一个电商网站(七)—— 实现售价上下文

    本系列所有文章 如何一步一步用DDD设计一个电商网站(一)-- 先理解核心概念 如何一步一步用DDD设计一个电商网站(二)-- 项目架构 如何一步一步用DDD设计一个电商网站(三)-- 初涉核心域 如 ...

  10. 一步一步学习SignalR进行实时通信_6_案例

    原文:一步一步学习SignalR进行实时通信_6_案例一步一步学习SignalR进行实时通信\_6_案例1 一步一步学习SignalR进行实时通信_6_案例1 前言 类的定义 各块功能 后台 上线 下 ...

最新文章

  1. 【numpy】协方差计算
  2. linux journalctl 命令 查询systemd init 系统日志
  3. 【Java基础】使用带有标签的break,跳出多层循环
  4. web开发集成数字证书_每个数字设计师都应该知道的Web开发的七个原则
  5. STL之accumulate
  6. SAP License:SAP项目上线时票到货未到和货到票未到的处理方式
  7. 【原】数据分析/数据挖掘 入门级选手建议
  8. Hive多用户模式搭建
  9. NMF(非负矩阵分解)的场景应用
  10. Redhat linux 5 Server相关介绍
  11. 百度要革自己的命?移动搜索或取消PC网页收录
  12. 一些可以参考的文档集合5
  13. Spring框架---全面详解【无比详细,学习总结】
  14. 【计算机基础】HTTP 超文本传输协议
  15. ps—添加、去除水印
  16. 分析DuxCms之AdminController
  17. python字符串字母怎么取出_Python需要从字符串中提取第一个和最后一个字母
  18. 2012年09月12日-13日
  19. 【OMAP-L138学习】 GDB+GDBServer调试ARM_Linux步骤
  20. mvp的全称_MVP英文全称是什么

热门文章

  1. linux c编程项目实例,Linux c编程实例_例子
  2. celery 停止任务_celery异步任务框架
  3. Python中曲率与弯曲的转换_Python中曲面曲率的Matlab等价
  4. eclipse spring boot项目搭建_spring-boot-plus项目配置文件(四)
  5. w7系统计算机网络密码是什么,解答win7系统共享弹出Windows安全窗口提示输入网络密码的详细教程...
  6. linux ubuntu基础,linux基础入门详细分析(基于ubuntu)
  7. C++知识点51——虚函数与纯虚函数(下)
  8. 数独基本规则_数独解题技巧总结
  9. PHP中对象的深拷贝与浅拷贝
  10. [CODEVS] 2189 数字三角形W