Hadoop2.4.1 使用MapReduce简单的数据清洗
package com.bank.service;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
/**
* 将非结构化的数据处理为结构化数据
* @author mengyao
*
*/
import com.bank.entity.CNY;
public class CnyDataFormat extends Configured implements Tool {
static class CnyDataFormatMapper extends Mapper<LongWritable, Text, NullWritable, CNY>{
CNY cny = new CNY();
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String line = value.toString();
String[] fields = line.split("\t");
if (fields.length == 42) {
String gzh = fields[12] ;
String currency = fields[9];
String version = fields[10];
String valuta = fields[11];
long qfTime;
try {
qfTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(fields[3]+" "+fields[4]).getTime();
} catch (ParseException e) {
qfTime = System.currentTimeMillis();
}
int flag = Integer.parseInt(fields[5]);
String machineID = fields[13];
cny.set(gzh, currency, version, valuta, qfTime, flag, machineID);
context.write(NullWritable.get(), cny);
} else {
System.err.println(" ERROR: data format failed!");
}
}
}
static class CnyDataFormatReduce extends Reducer<NullWritable, CNY, NullWritable, CNY>{
@Override
protected void reduce(NullWritable key, Iterable<CNY> value, Context context) throws IOException, InterruptedException {
for (CNY cny : value) {
context.write(NullWritable.get(), cny);
}
}
}
@Override
public int run(String[] arg0) throws Exception {
Job job = Job.getInstance(getConf(), CnyDataFormat.class.getSimpleName());
job.setJarByClass(CnyDataFormat.class); //设置main函数所在的类
FileInputFormat.setInputPaths(job, new Path(arg0[0]));
job.setMapperClass(CnyDataFormatMapper.class);
job.setMapOutputKeyClass(NullWritable.class);
job.setMapOutputValueClass(CNY.class);
job.setReducerClass(CnyDataFormatReduce.class);
job.setOutputKeyClass(NullWritable.class);
job.setOutputValueClass(CNY.class);
FileOutputFormat.setOutputPath(job, new Path(arg0[1]));
return job.waitForCompletion(true) ? 0 : 1; //等待MapReduce执行完成并打印作业进度详情
}
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
String[] paths = new GenericOptionsParser(conf, args).getRemainingArgs();
if (paths.length != 2) {
System.err.println("Usage: " + CnyDataFormat.class.getName() + " <in> <out>");
System.exit(2);
}
int status = ToolRunner.run(new CnyDataFormat(), args);
System.exit(status);
}
}
package com.bank.entity;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import org.apache.hadoop.io.Writable;
/**
* 实现Hadoop的序列化接口
* @author mengyao
*
*/
public class CNY implements Writable {
private String gzh;
private String currency;
private String version;
private String valuta;
private long qfTime;
private int flag;
private String machineID;
@Override
public void readFields(DataInput in) throws IOException {
this.gzh = in.readUTF();
this.currency = in.readUTF();
this.version = in.readUTF();
this.valuta = in.readUTF();
this.qfTime = in.readLong();
this.flag = in.readInt();
this.machineID = in.readUTF();
}
@Override
public void write(DataOutput out) throws IOException {
out.writeUTF(this.gzh);
out.writeUTF(this.currency);
out.writeUTF(this.version);
out.writeUTF(this.valuta);
out.writeLong(this.qfTime);
out.writeInt(this.flag);
out.writeUTF(this.machineID);
}
public void set(String gzh, String currency, String version,
String valuta, long qfTime, int flag, String machineID) {
this.gzh = gzh;
this.currency = currency;
this.version = version;
this.valuta = valuta;
this.qfTime = qfTime;
this.flag = flag;
this.machineID = machineID;
}
@Override
public String toString() {
return this.gzh +"\t"+ this.currency +"\t"+ this.version +"\t"+ this.valuta +"\t"+ this.qfTime +"\t"+ this.flag +"\t"+ this.machineID;
}
public String getGzh() {
return gzh;
}
public void setGzh(String gzh) {
this.gzh = gzh;
}
public String getCurrency() {
return currency;
}
public void setCurrency(String currnecy) {
this.currency = "cny";
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public String getValuta() {
return valuta;
}
public void setValuta(String valuta) {
this.valuta = valuta;
}
public long getQfTime() {
return qfTime;
}
public void setQfTime(long qfTime) {
this.qfTime = qfTime;
}
public int getFlag() {
return flag;
}
public void setFlag(int flag) {
this.flag = flag;
}
public String getMachineID() {
return machineID;
}
public void setMachineID(String machineID) {
this.machineID = machineID;
}
}
Hadoop2.4.1 使用MapReduce简单的数据清洗的更多相关文章
- MapReduce 简单的全文搜索2
上一个全文搜索实现了模糊查找,这个主要实现了精确查找,就是比如你查找mapreduce is simple那么他就只查找有这个句子的文章,而不是查找有这三个单词的文章. 这个版本需要重写反向索引,因为 ...
- oozie与mapreduce简单案例
准备工作 拷贝原来的模板 mkdir oozie-apps cd oozie-apps/ cp -r ../examples/apps/mar-reduce . mv map-reduce mr-w ...
- Hadoop2 使用 YARN 运行 MapReduce 的过程源码分析
Hadoop 使用 YARN 运行 MapReduce 的过程如下图所示: 总共分为11步. 这里以 WordCount 为例, 我们在客户端终端提交作业: # 把本地的 /home/hadoop/t ...
- MapReduce 简单数据统计
1. 准备数据源 摘录了一片散文,保存格式为utf-8 2. 准备环境 2.1 搭建伪分布式环境 https://www.cnblogs.com/cjq10029/p/12336446.html 上传 ...
- MapReduce简单执行过程及Wordcount案例
MapReducer运行过程 以单词统计为案例. 假如现在文件中存在如下内容: aa bb aa cc dd aa 当然,这是小文件,如果文件大小较大时会将文件进行 "切片" ,此 ...
- 【hadoop2.6.0】MapReduce原理
看了几篇博文,感觉还是云里雾里的. http://blog.csdn.net/opennaive/article/details/7514146 http://www.aboutyun.com/thr ...
- hadoop2.2编程:mapreduce编程之二次排序
mr自带的例子中的源码SecondarySort,我重新写了一下,基本没变. 这个例子中定义的map和reduce如下,关键是它对输入输出类型的定义:(java泛型编程) public static ...
- MapReduce 简单的全文搜索
上一个已经实现了反向索引,那么为什么不尝试下全文搜索呢.例如有了 Hello file3.txt:1; MapReduce file3.txt:2;fil1.txt:1;fil2.tx ...
- hadoop mapreduce 简单例子
本例子统计 用空格分开的单词出现数量( 这个Main.mian 启动方式是hadoop 2.0 的写法.1.0 不一样 ) 目录结构: 使用的 maven : 下面是maven 依赖. <de ...
随机推荐
- TinyXml 快速入门(三)
在<TinyXml 快速入门(二)>介绍使用tinyxml库获取xml文件声明,查询指定节点.删除指定节点的做法.在本文中继续介绍修改指定节点和增加节点的做法. 修改节点其实和查询指定节点 ...
- [转] splice系列系统调用
关注splice系列系统调用(包括splice,tee和vmsplice)已经有一段时间了,开始的时候并未能领会splice的意义所在,致使得出了“splice系列系统调用不怎么实用”的错误结论.随着 ...
- 递归---NYOJ-176 整数划分(二)和NYOJ-279队花的烦恼二
这道题目的递归思想和第一个题差不多, 主要思想是:func(n, m)的作用是将n划分为m个. 1. 如果n < m 的时候肯定是不能划分的,所以就返回0 2. 如果m = 1 或者 n = m ...
- Cannot modify header information - headers already sent by
有时候你在使用 header("Location: http://localhost/myblog/index.php/manager/listview");的时候会出现这个问题, ...
- springxml配置构造函数入参
springxml配置构造函数入参有深入的理解 集合mockito创建对象的方法.功能等同于创建对象的代码. spring配置文件中定义bean的好处 便于集中管理,系统任何地方都可以引用使用.如果不 ...
- asp.net微信开发第二篇----消息应答
当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上. 请注意: 1.关于重试的消息排重,推荐使用msgid排重. 2.微信服务器在五秒内收不到响应会断掉连接 ...
- 制作ado开发辅助工具类SqlHelper
public static class SqlHelper { //通过配置文件获取连接字符创 private static readonly string constr = Configuratio ...
- SVN库迁移整理方法总结
有时候需要从一台机器迁移svn存储库到另外一台机器,如果数据量非常大的话,没有好的方法是很不方便的,其实迁移svn跟迁移mysql差不多,也有导出导入的方案 以下是subversion官方推荐的备份方 ...
- JavaScript 显示弹出窗口
window . showModalDialog ( sURL,vArguments , sFeatures )参数说明: sURL--必选参数,用来指定对话框要显示的文档的URL. //要显示页面的 ...
- linux初识-02常用命令
文件目录操作命令 ls 现实文件和目录列表 ls -l 列出文件的详细信息 ls -a 列出当前目录所有文件 包括隐藏的文件 mkdir 创建目录 -p 父目录不存在的情况下先生成父目录 cd 切换目 ...