以下是自定义的一个数据类型,有两个属性,一个是名称,一个是开始点(可以理解为单词和单词的位置)
MR程序就不写了,请看WordCount程序。
package cn.genekang.hadoop.mr.RealignerTargetCreator;

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException; import org.apache.hadoop.io.WritableComparable;
import org.apache.hadoop.io.WritableComparator; public class ReadBean implements WritableComparable<ReadBean> {
/**
* 自定义的一个数据类型。
* 此数据类型可以作为key,也可以作为value
* 如果只作为value的话而且不需要排序的话可以继承自Writable接口。如果需要排序的话就必须实现WritableComparable接口
* 如果作为key的话,还必须要指定以什么作为key,或者说需要告诉shuffle,你的key值是怎么进行比较的。
* 以此,必须要定义一个Comparator的比较类,继承自 WritableComparator,而且要有定义key的比较器
* **/
private String locName;
private int readStart; public ReadBean() {
// TODO Auto-generated constructor stub
} //必须重写此方法,将属性进行序列化处理
@Override
public void write(DataOutput out) throws IOException {
out.writeUTF(locName);
out.writeInt(readStart);
} //必须重写此方法,反序列化,得到属性的值
@Override
public void readFields(DataInput in) throws IOException {
this.locName = in.readUTF();
this.readStart = in.readInt(); } //此方法是重写Object类的,可以不重写
@Override
public int hashCode() {
return locName.hashCode() * 13 + readStart;
} //要想对数据进行排序,必须重写此方法。1为升序,-1为降序,0为相等
@Override
public int compareTo(ReadBean o) {
if (this.locName.equals(o.getLocName())) {
return this.readStart > o.readStart ? 1 : -1;
} else {
return this.locName.compareTo(o.locName) > 0 ? 1 : -1;
} } //必须要重写,指明自定义数据类型的输出格式和输出内容
@Override
public String toString() {
return this.locName +"\t"+ this.readStart;
} //可以不重写
public boolean equals(ReadBean o) { if (this.locName.equals(o.getLocName())
&& this.readStart == o.getReadStart()) { return true;
}
return false; } //可以使用此方法为自定义数据类型赋值。
public void set(String name, int start) {
this.locName = name;
this.readStart = start;
} public String getLocName() {
return locName;
} public void setLocName(String locName) {
this.locName = locName;
} public int getReadStart() {
return readStart;
} public void setReadStart(int readStart) {
this.readStart = readStart;
} //定义一个内部的比较类,实现key的比较方法
public static class Comparator extends WritableComparator {
public Comparator() {
super(ReadBean.class);
// TODO Auto-generated constructor stub
} @Override
public int compare(byte[] arg0, int arg1, int arg2, byte[] arg3,
int arg4, int arg5) {
return compareBytes(arg0, arg1, arg2, arg3, arg4, arg5);
} } //定义一个key的比较器
static {
WritableComparator.define(ReadBean.class, new Comparator());
} }

Hadoop-MapReduce之自定义数据类型的更多相关文章

  1. Hadoop MapReduce自定义数据类型

    一 自定义数据类型的实现 1.继承接口Writable,实现其方法write()和readFields(), 以便该数据能被序列化后完成网络传输或文件输入/输出: 2.如果该数据需要作为主键key使用 ...

  2. Hadoop MapReduce编程 API入门系列之自定义多种输入格式数据类型和排序多种输出格式(十一)

    推荐 MapReduce分析明星微博数据 http://git.oschina.net/ljc520313/codeexample/tree/master/bigdata/hadoop/mapredu ...

  3. hadoop的自定义数据类型和与关系型数据库交互

    最近有一个需求就是在建模的时候,有少部分数据是postgres的,只能读取postgres里面的数据到hadoop里面进行建模测试,而不能导出数据到hdfs上去. 读取postgres里面的数据库有两 ...

  4. mapreduce 自定义数据类型的简单的应用

    本文以手机流量统计为例: 日志中包含下面字段 现在需要统计手机的上行数据包,下行数据包,上行总流量,下行总流量. 分析:可以以手机号为key 以上4个字段为value传传递数据. 这样则需要自己定义一 ...

  5. [Hadoop] - Mapreduce自定义Counter

    在Hadoop的MR程序开发中,经常需要统计一些map/reduce的运行状态信息,这个时候我们可以通过自定义Counter来实现,这个实现的方式是不是通过配置信息完成的,而是通过代码运行时检查完成的 ...

  6. Hadoop(16)-MapReduce框架原理-自定义FileInputFormat

    1. 需求 将多个小文件合并成一个SequenceFile文件(SequenceFile文件是Hadoop用来存储二进制形式的key-value对的文件格式),SequenceFile里面存储着多个文 ...

  7. Hadoop mapreduce自定义分组RawComparator

    本文发表于本人博客. 今天接着上次[Hadoop mapreduce自定义排序WritableComparable]文章写,按照顺序那么这次应该是讲解自定义分组如何实现,关于操作顺序在这里不多说了,需 ...

  8. Hadoop mapreduce自定义分区HashPartitioner

    本文发表于本人博客. 在上一篇文章我写了个简单的WordCount程序,也大致了解了下关于mapreduce运行原来,其中说到还可以自定义分区.排序.分组这些,那今天我就接上一次的代码继续完善实现自定 ...

  9. hadoop自定义数据类型

    统计某手机数据库的每个手机号的上行数据包数量和下行数据包数量 数据库类型如下: 数据库内容如下: 下面自定义类型SimLines,类似于平时编写的model import java.io.DataIn ...

  10. Hadoop MapReduce执行过程详解(带hadoop例子)

    https://my.oschina.net/itblog/blog/275294 摘要: 本文通过一个例子,详细介绍Hadoop 的 MapReduce过程. 分析MapReduce执行过程 Map ...

随机推荐

  1. 二进制方式快速安装MySQL数据库命令集合

    二进制方式快速安装MySQL数据库命令集合 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1.安装mysql ls mysql ...

  2. Qt标准对话框之QColorDialog

    Qt中提供了一些标准的对话框,用于实现一些常用的预定义功能,比如本节中将要介绍的颜色对话框——QColorDialog. 在不同的系统平台下,颜色对话框的显示效果可能会有所不同,主要因系统主题风格而异 ...

  3. Python3 字符编码

    编码 字符串是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节 ...

  4. NPOI2.0

    今天在使用NPOI2.0读取上传excel文件(excel2010)时,报了一个很奇怪的错误:无效的 URI: 未能分析主机名. 在网上查找了下找到的出错情况跟这个完全不着边际,没有办法只有自己去测试 ...

  5. React组件一

    <div id='test'></div> <script type='text/babel'> var Zu=React.createClass({ return ...

  6. less学习-语法(二)

    变量 @color1:#fff; 选择器  // Variables @mySelector: banner; // Usage .@{mySelector} { font-weight: bold; ...

  7. mongodb 非 admin 库 认证登陆失败 原因(百度好多都 是渣)db.addUser() 请走开。

    首先先晒一下log 日志错误信息 2016-07-13T22:19:43.667+0800 I ACCESS [conn4] authenticate db: finddemo { aut henti ...

  8. Windows下MySQL数据库备份脚本(二)

    说明: MySQL数据库安装目录:C:\Program Files\MySQL\MySQL Server 5.0 MySQL数据库存放目录:C:\Program Files\MySQL\MySQL S ...

  9. word中几个好用的宏代码(立方米上标、关闭样式自动更新、删除无效样式、表格加粗边框、宋体引号)

    Sub 替换立方米() With Selection.Find .Text = "m3" .Replacement.Text = "mm3" .Forward ...

  10. ipad ------ 与iPhone的差别

    1. 差异 iPhone是手机,iPad.iPad Mini是平板电脑 iPhone和iPad开发的区别 屏幕的尺寸 \分辨率 UI元素的排布 \设计 键盘 API 屏幕方向的支持 … … 2. iP ...