Hadoop计算平均值【转】
file1.txt
a 1
b 2
a 3
b 3
a 5
b 7
c 3
c 5
file2.txt
a 1
b 7
c 5
a 1
c 3
结果:
a 2.2
b 4.75
c 4.0
代码:
package org.apache.hadoop.examples; import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.DoubleWritable;
//import org.apache.hadoop.io.IntWritable;
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; public class Average { public static class AverageMaper extends Mapper<Object,Text,Text,Text>
{
//private final static IntWritable one=new IntWritable(1);
private static Text word=new Text();
public void map(Object key,Text value,Context context) throws
IOException,InterruptedException
{
StringTokenizer itr=new StringTokenizer(value.toString());
while(itr.hasMoreTokens())
{
word.set(itr.nextToken());
if(itr.hasMoreTokens())
context.write(word, new Text(itr.nextToken()+",1"));
}
}
}
public static class AveragerCombine extends Reducer<Text,Text,Text,Text>
{
public void reduce(Text key,Iterable<Text> values,Context context) throws
IOException,InterruptedException
{
int sum=0;
int cnt=0;
for(Text val:values)
{
String []str=val.toString().split(",");
sum+=Integer.parseInt(str[0]);
cnt+=Integer.parseInt(str[1]);
}
context.write(key,new Text(sum+","+cnt));
}
}
public static class AveragerReduce extends Reducer<Text,Text,Text,DoubleWritable>
{
public void reduce(Text key,Iterable<Text> values,Context context) throws
IOException,InterruptedException
{
int sum=0;
int cnt=0;
for(Text val:values)
{
String []str=val.toString().split(",");
sum+=Integer.parseInt(str[0]);
cnt+=Integer.parseInt(str[1]);
}
double res=(sum*1.0)/cnt;
context.write(key, new DoubleWritable(res));
}
} public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
Configuration conf=new Configuration();
String []myargs=args;
if(myargs.length!=2)
{
System.err.println("please input two args<in> <out>\n");
System.exit(2);
}
Job job=new Job(conf,"average job");
job.setJarByClass(Average.class);
job.setMapperClass(AverageMaper.class);
job.setCombinerClass(AveragerCombine.class);
job.setReducerClass(AveragerReduce.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
FileInputFormat.addInputPath(job, new Path(myargs[0]));
FileOutputFormat.setOutputPath(job,new Path(myargs[1]));
System.exit(job.waitForCompletion(true)?0:1);
}
}
Hadoop计算平均值【转】的更多相关文章
- matlab 利用while循环计算平均值和方差
一.该程序是用来测输入数据的平均值和方差的 公式: 二. 项目流程: 1. State the problem假定所有测量数为正数或者0,计算这一系列测量数的平均值和方差.假定我们预先不知道有多少测量 ...
- [BigData - Hadoop - YARN] YARN:下一代 Hadoop 计算平台
Apache Hadoop 是最流行的大数据处理工具之一.它多年来被许多公司成功部署在生产中.尽管 Hadoop 被视为可靠的.可扩展的.富有成本效益的解决方案,但大型开发人员社区仍在不断改进它.最终 ...
- PTA计算平均值(一波三折)
PTA计算平均值( 一波三折) 现在为若干组整数分别计算平均值. 已知这些整数的绝对值都小于100,每组整数的数量不少于1个,不大于20个. 输入格式:首先输入K(不小于2,不大于20).接下来每一行 ...
- Hadoop计算中的Shuffle过程(转)
Hadoop计算中的Shuffle过程 作者:左坚 来源:清华万博 时间:2013-07-02 15:04:44.0 Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方.要想理解Ma ...
- 为什么在 Java 中用 (low+high)>>>1 代替 (low+high)/2 或 (low+high)>>1 来计算平均值呢?好在哪里?
>>>与>>是位运算符,只对整型有效(不能用于浮点型).当是整型的时候(low+high)>>1可以代替(low+high)/2.>>>是无 ...
- C 语言实例 - 计算平均值
C 语言实例 - 计算平均值 C 语言实例 C 语言实例 使用数组来计算几个数的平均值. 实例 #include <stdio.h> int main() { int n, i; ], s ...
- PTA 计算平均值
现在为若干组整数分别计算平均值. 已知这些整数的绝对值都小于100,每组整数的数量不少于1个,不大于20个. 输入格式:首先输入K(不小于2,不大于20).接下来每一行输入一组数据(至少有一组数据), ...
- hadoop streaming anaconda python 计算平均值
原始Liunx 的python版本不带numpy ,安装了anaconda 之后,使用hadoop streaming 时无法调用anaconda python , 后来发现是参数没设置好... 进 ...
- Spark与Hadoop计算模型的比较分析
http://tech.it168.com/a2012/0401/1333/000001333287.shtml 最近很多人都在讨论Spark这个貌似通用的分布式计算模型,国内很多机器学习相关工作者都 ...
随机推荐
- 导入Maven项目后,Eclipse提示“Missing artifact ”类的错误
导入Maven项目后,Eclipse提示“Missing artifact ”类的错误 标签: Maven Missing art 2016-08-15 16:05 679人阅读 评论(0) 收藏 举 ...
- Java入门与基础算法班 - 课程大纲
第1章 零基础转CS,如何准备? · 转专业找CS工作怎么办? · 零基础如何在最短时间内拿到offer? · 如何写好简历? · IT技术面试内容有哪些? · JAVA语言怎么入门? 第2章 数组与 ...
- linux下配置SS5(SOCK5)代理服务
安装sock5所需依赖开发库: # yum install pam-devel openldap-devel openssl-devel 下载并解压安装sock5 # wget http://down ...
- myeclipse中项目上传到cvs注意事项
上传工程时检查cvsignore文件,如果有该文件直接删掉再上传.这样才能保证下载下来的文件保持原上传的目录结构.
- 【WP8】LoopingSelector
WP8的WindowsPhoneToolkit工具包中有一个 LoopingSelector 可以想选择日期或时间一样进行选择 1.首先当然是引用WindowsPhoneToolkit 在Nuget控 ...
- 使用 StoryBoard 实现左右按钮切换图片的浏览效果
关键技能:使用故事板进行布局时,点击选中控件(组件)并按住 control 键向某个方向拖动,产生一条实线,然后弹出的窗口可以设置控件(组件)的布局约束条件:从而实现自动布局 AutoLayout 效 ...
- 解决win8.1电脑无法安装手机驱动问题
相信安装过win8.1的朋友都会有个问题,那就是自己的安卓手机怎么都连不上电脑,比如360助手.豌豆荚.91助手,都安不上驱动.下面几个简单步骤即可轻松解决. 1.首先声明,官方的驱动是完全支持win ...
- 完美解决ListView中事件ItemCreated中使用ClientID导致插入数据失败
于昨天晚上看到视频做到这个例子,但是发现始终有错误,在ListView的ItemCreated事件中使用了ClientID则会导致数据插入数据库失败.当点击插入按钮时,网页就像点击F5刷新一样,无任何 ...
- oracle long类型转换成varchar2
CREATE OR REPLACE FUNCTION LONG_TO_CHAR( in_rowid rowid,in_owner varchar,in_table_name varchar,in_co ...
- Symbol.iterator的理解
https://blog.csdn.net/margin_0px/article/details/82971545