以下是自定义的一个数据类型,有两个属性,一个是名称,一个是开始点(可以理解为单词和单词的位置)
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. 虚拟机环境Centos如何上网

    虚拟机环境Centos如何上网----------by ruffianfish.痞子鱼 因为我是用的虚拟机的环境,所以一切操作角度从虚拟机出发. 虚拟机环境的优点: 适合新手学习linux 永远不要怕 ...

  2. margin系列之内秀篇(二)

    本系列摘自  飘零雾雨的博客 可挖掘性 之前已经写过一篇关于 margin 应用场景的文章:margin系列之内秀篇,当然,它的应用场景会远大于文中所述,无法一一列举. 所以本篇权当是对此的补遗好了, ...

  3. osg学习笔记2, 命令行参数解析器ArgumentParser

    ArgumentParser主要负责命令行参数的读取 #include <osgDB/ReadFile> #include <osgViewer/Viewer> int mai ...

  4. Python正则表达式学习

    1.Python的正则表达式需要用到re模块,有两个方法:match和search,match从第一个字符串开始匹配,search从任意字符串开始匹配,所以match比search严格. 如果匹配成功 ...

  5. IIS日志分析

    发现一个强大的图形化IIS日志分析工具——Log Parser Studio,下面分享一个实际操作案例. 1. 安装Log Parser Studio a) 需要先安装Log Parser,下载地址: ...

  6. microsoft office visio基本使用方法

    以下是画流程图.程序内存分配等等框图用到的点滴使用方法,记录在这里以备偶尔只需. 1.画大括号“{}” 在Visio操作界面下,依次点击“文件(File)”—“形状(Shapes)”--“其他Visi ...

  7. uboot 顶层makefile细节分析

    uboot的源文件众多,学习庞然大物首先找到脊椎--顶层的makfile,逐一破解.但是,uboot的makefile同样是一个庞然大物,所以也要找到它的主线.倘若过分专注部分细节,很难做到把握全局, ...

  8. html+css篇

    一,html语义话标签 http://www.html5jscss.com/html5-semantics-section.html

  9. C语言写解一元二次方程程序心得

    前言:在网上看到不少解一元二次方程的小程序,在使用时总得出一大堆小数,感觉很不爽,遂自己重新写了一遍. 首先,先回忆一下一元二次方程的求根公式: 分别读取二次项.一次项和常数项系数并且求出delta ...

  10. LightOj_1287 Where to Run

    题目链接 题意: 有n个街口和m条街道, 你后边跟着警察,你需要进行大逃亡(又是大爱的抢银行啊),在每个街口你都有≥1个选择, 1)停留在原地5分钟. 2)如果这个街口可以到xi这个街口, 并且, 通 ...