Hadoop-MapReduce之自定义数据类型
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之自定义数据类型的更多相关文章
- Hadoop MapReduce自定义数据类型
一 自定义数据类型的实现 1.继承接口Writable,实现其方法write()和readFields(), 以便该数据能被序列化后完成网络传输或文件输入/输出: 2.如果该数据需要作为主键key使用 ...
- Hadoop MapReduce编程 API入门系列之自定义多种输入格式数据类型和排序多种输出格式(十一)
推荐 MapReduce分析明星微博数据 http://git.oschina.net/ljc520313/codeexample/tree/master/bigdata/hadoop/mapredu ...
- hadoop的自定义数据类型和与关系型数据库交互
最近有一个需求就是在建模的时候,有少部分数据是postgres的,只能读取postgres里面的数据到hadoop里面进行建模测试,而不能导出数据到hdfs上去. 读取postgres里面的数据库有两 ...
- mapreduce 自定义数据类型的简单的应用
本文以手机流量统计为例: 日志中包含下面字段 现在需要统计手机的上行数据包,下行数据包,上行总流量,下行总流量. 分析:可以以手机号为key 以上4个字段为value传传递数据. 这样则需要自己定义一 ...
- [Hadoop] - Mapreduce自定义Counter
在Hadoop的MR程序开发中,经常需要统计一些map/reduce的运行状态信息,这个时候我们可以通过自定义Counter来实现,这个实现的方式是不是通过配置信息完成的,而是通过代码运行时检查完成的 ...
- Hadoop(16)-MapReduce框架原理-自定义FileInputFormat
1. 需求 将多个小文件合并成一个SequenceFile文件(SequenceFile文件是Hadoop用来存储二进制形式的key-value对的文件格式),SequenceFile里面存储着多个文 ...
- Hadoop mapreduce自定义分组RawComparator
本文发表于本人博客. 今天接着上次[Hadoop mapreduce自定义排序WritableComparable]文章写,按照顺序那么这次应该是讲解自定义分组如何实现,关于操作顺序在这里不多说了,需 ...
- Hadoop mapreduce自定义分区HashPartitioner
本文发表于本人博客. 在上一篇文章我写了个简单的WordCount程序,也大致了解了下关于mapreduce运行原来,其中说到还可以自定义分区.排序.分组这些,那今天我就接上一次的代码继续完善实现自定 ...
- hadoop自定义数据类型
统计某手机数据库的每个手机号的上行数据包数量和下行数据包数量 数据库类型如下: 数据库内容如下: 下面自定义类型SimLines,类似于平时编写的model import java.io.DataIn ...
- Hadoop MapReduce执行过程详解(带hadoop例子)
https://my.oschina.net/itblog/blog/275294 摘要: 本文通过一个例子,详细介绍Hadoop 的 MapReduce过程. 分析MapReduce执行过程 Map ...
随机推荐
- OpenJudge 2749 分解因数
1.链接地址: http://bailian.openjudge.cn/practice/2749/ 2.题目: 总时间限制: 1000ms 内存限制: 65536kB 描述 给出一个正整数a,要求分 ...
- main(int argc , char *argv[])
#include <unistd.h>#include <stdlib.h>#include <stdio.h> int main(int argc, char * ...
- Jquery EasyUI中treegrid的中右键菜单和一般按钮同时绑定事件时的怪异事件
做个项目使用jquery easyui来做前端,也许是对此不是很熟悉,总是发现一些不可理解的事件. 主要源代码如下: <script type="text/javascript&qu ...
- JS如果阻止事件冒泡和浏览器默认事件
原地址:http://missra.com/article/web-57.html 嵌套的标签元素,如果父元素和子元素都绑定了一些事件,那么在点击最内层子元素时可能会触发父级元素的事件,下面介绍一下J ...
- JavaScript获取非行间样式/定义样式
html节点的样式分为以下几种 (1)浏览器默认样式 (2)引用样式(引用外部css文件的样式.style标签内定义的样式) 引用外部css样式:<link rel="styleshe ...
- 阿里云服务器CentOS 5.7(64位)安装配置LAMP服务器(Apache+PHP5+MySQL)
一.快速安装Apache+PHP5+MySql ----------------------------------------------------- 补充:由于163的yum源上只有php5.1 ...
- XML2_XML的节点和元素
在JAVA语言中使用JAXP操作XML文件的时候,有两个接口,一个是Node,一个是Element,Element接口继承自Node接口. 在这一层次我们进一步理解XML中更具体的分类: 元素,属性, ...
- AppDomain(1)-AppDomainSetup
- 【转】【Top 100 Best Blogs for iOS Developers】
原文地址:http://www.softwarehow.com/best-blogs-for-ios-developers/ (by JP Zhang | Last updated: Apr 5, 2 ...
- DES原理与实现
一 DES综述 DES是对称密码的一种,它使用56位秘钥对64位长分组进行加密.DES对每个分组的内容都会进行16轮迭代,每轮的操作相同但是对应不同的子秘钥.所有的子秘钥都是由主密钥推导而来. 64位 ...