一 排序原理
二 测试样例
输入
file1:
2
32
654
32
15
756
65223
file2:
5956
22
650
92
file3:
26
54
6
输出:
1 12
2 6
3 15
4 22
5 26
6 32
7 32
8 54
9 92
10 650
11 654
12 756
13 5956
14 65223
三 代码
Sort.java
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.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.Partitioner;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;
public class Sort {
public static class Map extends
Mapper<Object, Text, IntWritable, IntWritable> {
private static IntWritable data = new IntWritable();
public void map(Object key, Text value, Context context)
throws IOException, InterruptedException {
String line = value.toString();
data.set(Integer.parseInt(line));
context.write(data, new IntWritable(1));
}
}
public static class Reduce extends
Reducer<IntWritable, IntWritable, IntWritable, IntWritable> {
private static IntWritable linenum = new IntWritable(1);
public void reduce(IntWritable key, Iterable<IntWritable> values,
Context context) throws IOException, InterruptedException {
for (IntWritable val : values) {
context.write(linenum, key);
linenum = new IntWritable(linenum.get() + 1);
}
}
}
public static class Partition extends Partitioner<IntWritable, IntWritable> {
@Override
public int getPartition(IntWritable key, IntWritable value,
int numPartitions) {
int MaxNumber = 65223;
int bound = MaxNumber / numPartitions + 1;
int keynumber = key.get();
for (int i = 0; i < numPartitions; i++) {
if (keynumber < bound * i && keynumber >= bound * (i - 1))
return i - 1;
}
return 0;
}
}
/**
* @param args
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Configuration conf = new Configuration();
String[] otherArgs = new GenericOptionsParser(conf, args)
.getRemainingArgs();
if (otherArgs.length != 2) {
System.err.println("Usage WordCount <int> <out>");
System.exit(2);
}
Job job = new Job(conf, "Sort");
job.setJarByClass(Sort.class);
job.setMapperClass(Map.class);
job.setPartitionerClass(Partition.class);
job.setReducerClass(Reduce.class);
job.setOutputKeyClass(IntWritable.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
相关推荐
当我们需要对数据进行复杂的排序需求时,例如“年份升序,按照年份聚合,气温降序”,MapReduce的二次排序(Secondary Sort)机制就显得尤为重要。这个概念主要解决的是在MapReduce默认排序规则基础上,进行更精细化...
利用采样器实现mapreduce任务输出全排序大数据-MapReduce
在这个"大数据Hadoop MapReduce词频统计"的场景中,我们利用MapReduce来统计文本中的词汇出现频率。这是数据分析中一个常见的任务,有助于理解文本内容的概貌。Map阶段的任务是对输入的文本进行分词,并形成<单词, 1...
通过上述方式,我们可以利用MapReduce在并行计算环境中高效地处理大规模网页排序问题,实现了分布式环境下PageRank算法的高效执行。这种方法不仅提高了计算速度,还确保了在互联网规模增长时算法的可扩展性。
总的来说,这个项目可能是一个教学示例或实际应用,展示了如何使用Hadoop MapReduce对大规模的温度数据进行排序,同时利用人工智能技术进行数据分析。这涵盖了大数据处理、分布式系统和机器学习等多个IT领域的关键...
这个项目可能包含了多个MapReduce作业,展示了如何利用Hadoop MapReduce解决实际问题。开发者通常会编写Java类实现Mapper和Reducer接口,然后通过Hadoop的JobConf类配置任务参数,最后提交到Hadoop集群执行。 总的...
利用MapReduce实现了求学生成绩的最大值,最小值,及成绩分布。结合我的博客“MapReduce之学生平均成绩”看,效果更好。
标题中的“用MapReduce实现KMeans算法”是指利用Apache Hadoop的MapReduce框架来执行KMeans聚类算法。KMeans是一种流行的无监督机器学习方法,用于将数据集划分为多个簇,而MapReduce则是一种分布式计算模型,适用于...
通过这个"MapReduce项目 数据清洗",我们可以了解到如何利用MapReduce对大规模的族谱数据进行高效、可靠的处理,从而获取有价值的洞察和结论。这一过程中涉及的技巧和方法对于大数据分析和挖掘具有广泛的适用性。
第二次MapReduce操作(Second MR)用于对累加后的`DL_Num`进行排序,使得歌曲的点播次数从高到低排列。输出格式为`MusicID + DL_Num`。 在实现过程中,需要注意的是,第二个MapReduce任务的输入目录是第一个任务的...
本主题聚焦于如何利用Hadoop的MapReduce模型进行词频统计,以《哈姆雷特》为例,展示如何在海量文本数据中高效地计算每个单词的出现次数。 【描述】:“对哈姆雷特进行词频统计,利用大数据的Hadoop框架进行计算,...
斯坦福大学提供的这个示例是针对大数据算法的K-Means实现,利用MapReduce进行并行计算,提高效率。K-Means是一种常用的无监督机器学习算法,用于聚类分析,将数据分到不同的类别中。 首先,我们要理解MapReduce的...
MapReduce是一种广泛应用于大数据处理的并行编程模型,它能够处理PB级别的数据。由于MapReduce处理数据的...通过实际应用学习,开发者将能够更加深刻地理解大数据处理流程,以及如何利用MapReduce技术解决实际问题。
WordCount是MapReduce最基础且经典的示例,它演示了如何利用MapReduce处理文本数据并统计每个单词出现的次数。在这个案例中,我们将深入理解MapReduce的工作原理,并通过WordCount的例子来解析其实现过程。 首先,...
### MapReduce详解包括配置文件 #### 一、MapReduce概览与原理 MapReduce作为Hadoop的核心组件之一,提供了一种高效、可靠的分布式...通过深入理解其工作机制和特点,开发者可以更好地利用MapReduce来解决实际问题。
### MapReduce进阶详解 #### 一、MapReduce的核心概念 ...无论是初学者还是经验丰富的开发者,深入理解MapReduce的原理和高级特性都是十分必要的,这将有助于在实际项目中更加高效地利用MapReduce框架进行大数据处理。
- **全排序**:MapReduce可以通过中间键值对的排序来实现全数据集的排序,先在Map阶段生成排序的中间结果,然后在Reduce阶段进行归并排序。 - **混排**:在某些情况下,需要在所有数据之间进行混合排序,这可能...
MapReduce的核心在于Map函数和Reduce函数,Map函数负责对输入数据进行处理并生成中间键值对,而Reduce函数则将这些中间键值对进行聚合,产生最终结果。 1.1.1 MapReduce作业运行流程 MapReduce的工作流程通常包括...