如何用Hadoop计算平均值
数据
data.txt
a 2
a 3
a 4
b 5
b 6
b 7
代码
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 TokenizerMapper extends
Mapper<Object, Text, Text, Text> {
private final static IntWritable one = new IntWritable(1);
private 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"));
}
}
}
}
static class AverageCombine extends Reducer<Text, Text, Text, Text> {
public void reduce(Text key, Iterable<Text> values, Context context)
throws IOException, InterruptedException {
int sum = 0, cnt = 0;
for (Text val : values) {
String[] s1 = val.toString().split(",");
sum += Integer.parseInt(s1[0]);
cnt += Integer.parseInt(s1[1]);
}
String s;
System.out.println("Combine" + (s = new String(sum + "," + cnt)));
context.write(key, new Text(new String(sum + "," + cnt)));
}
}
static class AverageReducer extends
Reducer<Text, Text, Text, DoubleWritable> {
public void reduce(Text key, Iterable<Text> values, Context context)
throws IOException, InterruptedException {
int sum = 0, cnt = 0;
for (Text val : values) {
String[] s = val.toString().split(",");
sum += Integer.parseInt(s[0]);
cnt += Integer.parseInt(s[1]);
}
String s;
System.out.println("reduce"
+ (s = new String(key + "," + (sum * 1.0 / cnt))));
context.write(key, new DoubleWritable(sum * 1.0 / cnt));
}
}
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
String[] otherArgs = args;
if (otherArgs.length != 2) {
System.err.println("Usage:Data Average <in> <out>");
System.exit(2);
}
Job job = new Job(conf, "Data Average");
job.setJarByClass(Average.class);
job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(AverageCombine.class);
job.setReducerClass(AverageReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
执行
bin/hadoop jar Average.jar Average data.txt out
结果
a 3.0
b 6.0
分享到:
相关推荐
java操作hadoop之mapreduce计算整数的最大值和最小值实战源码,附带全部所需jar包,欢迎下载一起学习。
Hadoop 分析统计学生考试成绩1
MapReduce求取行平均值 MapReduce小实例 数据有经过处理已经添加行号的 也有未添加的 行平均值的四种求法
MapReduce求行平均值--标准差--迭代器处理--MapReduce案例
8.3 R 和Streaming 8.3.1 Streaming 和map-only R 技术点57 计算股票日平均值8.3.2 Streaming、R 和完整的MapReduce技术点58 计算股票的累积均值8.4 Rhipe――将客户端R 和Hadoop 进行集成 技术点59 ...
⼤量:批处理是处理极为海量数据集的唯⼀⽅法 批处理⾮常适合需要访问全套记录才能完成的计算⼯作,例如计算总数以及平均数。但是不适合对处理时间要求较⾼的场合,因为处理⼤量 数据通常需要⼤量的时间。 ⼆、...
Hadoop MapReduce计算平均值 进入 这是一个简单的MapReduce代码,用于计算输入文件中换行符分隔的整数的平均值 脚步 创建EMR集群并ssh到主节点 克隆此存储库 如下运行mvn clean install或创建jar export HADOOP_...
mapreduce 编程 此示例程序将让您提取有用的统计数据,例如排名前 10 的平均评分电影、使用 Hadoop map-reduce 框架以及链接多个映射器和化简器对 200 万条记录进行基于流派的过滤
技术点57 计算股票日平均值 8.3.2 Streaming、R 和完整的MapReduce 技术点58 计算股票的累积均值 8.4 Rhipe――将客户端R 和Hadoop 进行集成 技术点59 使用Rhipe 计算CMA 8.5 RHadoop――更简单地在...
本次项目基于Python爬虫与Movielens数据集作为数据来源,获取CSV格式的数据,使用Hadoop HDFS作为数据的分布式存储平台,使用MongoDB作为数据结构化、规范化的处理并对运算结果进行存储,使用Spark暴露对外SQL接口,...
3. 利用测试文档的真实类别,计算分类模型的Precision,Recall和F1值。 ## 数据集说明 我在数据集中选择了 `NBCorpus\Country` 文件夹下的 CHINA 和 CANA 作为本次实验的样本,其中 CHINA 类中包含 255 个文本,CAN...
编写hadoop项目对微博内容进行分词统计,设置一个阀值,当一个词的出现的数目超过这个阀值时就将其加入到热词列表里,在以后的每天就对其进行统计 将处理后的数据写入hive 整片博客分为这几个部分 : 1:微博热词...
这个案例将展示如何使用PySpark读取一个文本文件,进行一些基本的数据处理,并计算某个字段的平均值。 在这个案例中,我们首先创建了一个SparkSession,这是使用Spark的入口点。然后,我们从一个假设的HDFS(Hadoop...
Hadoop、Spark、Kafka、Hbase..... 等,更新中... 综合实践项目 项目名 说明 使用 Spark SQL imooc 访问日志,数据清洗,统计,可视化 入门学习示例 项目名 所属组件 介绍 MapReduce MapReduce 实验 - 计算气温 最大...
该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! <项目介绍> 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! ...
该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! <项目介绍> 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! ...
利用MapReduce实现了求学生成绩的最大值,最小值,及成绩分布。结合我的博客“MapReduce之学生平均成绩”看,效果更好。
相比Ha doop,Spark是一个分布式内存型计算框架,它在Hadoop MapReduce优点的基础上,提出了RDD数据模型,提供了多种算子,并且可以将计算的中 间结果存放到内存中,这使得迭代计算的效率更高,更适合于实时计算、...
五种⼤数据架构简介 ⼤数据是收集、整理、...通过对每个节点计算的结果进⾏汇总和组合对每个键的值进⾏"Reducing" · 将计算⽽来的最终结果重新写⼊ HDFS 优势和局限 由于这种⽅法严重依赖持久存储,每个任务需要多次执
以Hadoop和Spark是最常见的两个计算平台,下面就以这两个平台说明: 1、Hadoop中的数据倾斜 Hadoop中直接贴近用户使用使用的时Mapreduce程序和Hive程序,虽说Hive最后也是用MR来执行(至少目前Hive内存计算并不普及...