今天去百度面试,这么简单的题做法都有问题,悲哀啊,mark一下。
估计要和百度失之交臂了,悔恨。
其实当时有想法了的,不过被面试官问了一句“放内存够大吗?”一下打消了这个想法。愁啊。
算法如下。不知道对不对。回去再研究下
package com.bupt.mapreduce;
/**
*
*/
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
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.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
import java.io.IOException;
import java.util.TreeMap;
//利用MapReduce求最大值海量数据中的K个数
public class Top_k_new extends Configured implements Tool {
public static class MapClass extends Mapper<LongWritable, Text, NullWritable, Text> {
public static final int K = 100;
private TreeMap<Integer, Text> fatcats = new TreeMap<Integer, Text>();
public void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
String[] str = value.toString().split(",", -2);
int temp = Integer.parseInt(str[8]);
fatcats.put(temp, value);
if (fatcats.size() > K)
fatcats.remove(fatcats.firstKey())
}
@Override
protected void cleanup(Context context) throws IOException, InterruptedException {
for(Text text: fatcats.values()){
context.write(NullWritable.get(), text);
}
}
}
public static class Reduce extends Reducer<NullWritable, Text, NullWritable, Text> {
public static final int K = 100;
private TreeMap<Integer, Text> fatcats = new TreeMap<Integer, Text>();
public void reduce(NullWritable key, Iterable<Text> values, Context context)
throws IOException, InterruptedException {
for (Text val : values) {
String v[] = val.toString().split("\t");
Integer weight = Integer.parseInt(v[1]);
fatcats.put(weight, val);
if (fatcats.size() > K)
fatcats.remove(fatcats.firstKey());
}
for (Text text: fatcats.values())
context.write(NullWritable.get(), text);
}
}
public int run(String[] args) throws Exception {
Configuration conf = getConf();
Job job = new Job(conf, "TopKNum");
job.setJarByClass(Top_k_new.class);
FileInputFormat.setInputPaths(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
job.setMapperClass(MapClass.class);
// job.setCombinerClass(Reduce.class);
job.setReducerClass(Reduce.class);
job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);
job.setOutputKeyClass(NullWritable.class);
job.setOutputValueClass(Text.class);
System.exit(job.waitForCompletion(true) ? 0 : 1);
return 0;
}
public static void main(String[] args) throws Exception {
int res = ToolRunner.run(new Configuration(), new Top_k_new(), args);
System.exit(res);
}
}
相关推荐
已知有若干个文件(多个),文件中包含若干个正整数,每行一个,示例如下: 45 3 78 456 70 1 999 。。。 编写MR程序分别求解所有文件中最大的三个值(TOP 3)
主要为大家详细介绍了基于MapReduce实现决策树算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
基于hadoop2.0,mapreduce实现朴素贝叶斯算法,源码,NaieBayes
基于哈希技术和MapReduce的大数据集K-近邻算法实现代码
基于MapReduce的决策树算法并行化_陆秋
针对海量数据背景下K-means聚类结果不稳定和收敛速度较慢的问题,提出了基于MapReduce框架下的K-means改进算法。首先,为了能获得K-means聚类的初始簇数,利用凝聚层次聚类法对数据集进行聚类,并用轮廓系数对聚类...
使用Hadoop MapReduce实现两个矩阵相乘算法
大数据挖掘中的MapReduce并行聚类优化算法研究 (1).pdf
利用MapReduce框架改进K-means虽然解决了这个问题,但也存在着聚类效果不稳定以及准确率不高等问题,提出一种改进算法,利用MapReduce框架实现K-means时,采用多次随机抽样,通过计算密度、距离与平方误差等方法,...
用MapReduce实现KMeans算法,数据的读写都是在HDFS上进行的,在伪分布下运行没有问题。文档中有具体说明。
基于MapReduce的矩阵相乘算法代码及其使用
利用k_means聚类算法的MapReduce并行化实现,为学习hadoop的同学提供参考
MapReduce下的Dijkstra并行算法研究.pdf
基于MapReduce的Apriori算法代码及其使用
实验内容:给定国际通用UCI数据库中FISHERIRIS数据集,其meas集包含150个样本数据,每个数据含有莺尾属植物的4个属性,即萼片长度、萼片宽度...要求在该数据集上用MapReduce结构实现k-means聚类算法,得到的聚类结果。
MapReduce求取行平均值 MapReduce小实例 数据有经过处理已经添加行号的 也有未添加的 行平均值的四种求法
为了解决这两个问题,基于MapReduce的top-k高效用模式挖掘算法(TKHUP_MaR)被提出。该算法通过两次扫描数据库,利用三次MapReduce来实现并行top-k高效用模式的挖掘。通过实验表明TKHUP_MaR 算法在并行挖掘top-k高效...
基于MapReduce的图算法
基于MapReduce并行的Apriori算法改进研究,这篇论文蛮有用的
摘要:为了提高k-nearestneighboralgorithm(KNN)算法处理大数据集的能力,本文利用MapReduce并行编程模型,同时结合KNN算法自