如何用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
分享到:
相关推荐
【标题】"基于Hadoop计算机平均分"是一个关于利用Java编程语言和Apache Hadoop...通过这个项目,学习者不仅可以掌握如何使用Java和Hadoop计算平均分,还能了解到如何编写MapReduce作业,以及如何组织和管理团队项目。
本教程将详细讲解如何使用Java编程语言操作Hadoop的MapReduce来计算整数序列中的最大值和最小值,这对于数据分析和处理任务来说是非常基础且实用的技能。 首先,我们需要理解MapReduce的工作原理。MapReduce是一种...
对于行平均值,我们可以让Partitioner根据行号或标识符进行分区,以确保相同行的数据在同一个Reducer中计算平均值。 在实现这些方法时,需要注意数据类型转换和错误处理。例如,数值可能以字符串形式存在,需要转换...
- **分析1**:查询平均评分排名前十的国家及其评分,使用GROUP BY和AVG函数计算平均值。 - **分析2**:同样方法分析平均评分排名前十的电影类型。 - **分析3**:统计每种类型电影的平均时长,按时长排序,选择...
在这个“MapReduce求平均值示例程序”中,我们将深入理解如何利用MapReduce解决计算平均值的问题,同时也会涉及到日志系统在调试中的应用。 首先,Map阶段是MapReduce工作流程的第一步。在这个阶段,原始数据被分割...
使用 Hadoop 对成绩进行统计,这里需要设置命令行参数为 input 和 output,前者是 csv 文件的路径,后者是 Hadoop 任务结束后,将结果输出的路径。 * 运行网页程序:只需要执行 SpringApplication.run...
或者使用MapReduce计算大规模数据集的统计指标,如平均值、最大值和最小值。 5. **Hadoop生态系统**:Hadoop并不是孤立的,它有一个丰富的生态系统,包括Hive(用于数据仓库)、Pig(提供高级数据处理语言)、Spark...
计算平均值时,需要先得到元素和(如上述的17),然后除以数组长度(在这个例子中是6)。所以平均值是17 / 6 ≈ 2.83。 这些操作在大数据分析中尤其重要,因为大数据通常涉及处理大量数值数据,寻找其中的模式、...
在这个案例中,"lqc_Data_Avg_SD"很可能是输入数据集的名字,它可能包含了多行数值数据,等待我们用MapReduce方法计算平均值和标准差。实际操作中,我们需要编写Java代码实现MapReduce作业,配置输入输出路径,并...
这可能涉及多种统计方法,如平均值、中位数、众数等,以了解订单量、客单价、热门菜品、高峰时段等信息。此外,还可以使用机器学习算法预测订单趋势、识别异常行为或进行用户聚类。 数据可视化是让非技术团队理解...
Reducer接收来自所有Mapper的相同键的数据,并执行聚合操作,例如求和、平均值计算或者连接操作。这使得数据处理结果被汇总到一起,提供最终的输出。MapReduce通过这种分而治之的方式,实现了大规模数据处理的高效性...
在`com.hebut.mr`包下,创建一个名为`Score`的类,继承自`Mapper`和`Reducer`,用于处理输入数据并计算平均值。这里的代码导入了Hadoop的相关库,如`Configuration`、`Job`、`Mapper`、`Reducer`等,这些都是Hadoop ...
3. **更新质心**:对于每个簇,计算所有数据点的平均值作为新的质心。 4. **重复**:重复第2步和第3步,直到质心不再发生变化或达到最大迭代次数。 **4.1.2 K-Means在MapReduce框架中的适应** 为了提高K-Means算法...
这一步骤可以用来计算每位球员的赛季平均值,最高值,或者与其他球员进行比较。 为了运行这个 MapReduce 程序,我们需要编写 Java 代码,并将其打包成 JAR 文件。之后,我们可以通过 Hadoop 命令行工具提交作业,...
Reduce任务通常涉及聚合操作,比如求和或平均值。 #### 六、HDFS的特点与优势 - **高容错性**: HDFS自动将数据复制到集群中的多个节点,即使某些节点发生故障,也可以保证数据的完整性。 - **可扩展性**: HDFS支持...
通过这个实验,学生将深入理解Hadoop MapReduce的工作原理,掌握如何处理自定义数据类型,使用Combiner优化性能,以及如何通过Eclipse提交和管理MapReduce任务。这些都是大数据处理和分布式计算中的核心技能,对于...
Hadoop是一个开源的分布式计算框架,由Apache软件基金会维护。它的设计目标是使大型数据集在普通硬件上进行快速、可靠和可扩展的处理。Hadoop的核心组件包括HDFS(Hadoop Distributed File System)和MapReduce,...
列式统计可能涉及计算文件中特定列的值,如总和、平均值或最大最小值。在mrflowcount工程中,假设我们有一个结构化的数据文件,每一行代表一条记录,每列包含不同类型的数据。MapReduce的处理方式如下: 1. **...
4. **分析**:执行各种统计计算,如平均值、最大值、最小值,或者使用更复杂的算法进行预测和模式识别。 5. **结果导出**:最后,将处理后的结果保存回HDFS或输出到其他系统进行进一步的分析或展示。 在大数据领域...
接下来,Reduce阶段将这些中间结果进行聚合,通常用于计算汇总或聚合函数,如求和、平均值或最大值等。 在这个例子中,我们创建了一个名为`GetMaxValueMapReduceTest`的类,它继承了`MyMapReduceSIngleColumnTest`...