当前位置: 首页 > news >正文

上海网站排名优化价格/百度seo代理

上海网站排名优化价格,百度seo代理,温州网络有限公司,erp合同管理系统简介 TopN算法是一个经典的算法,由于每个map都只是实现了本地的TopN算法,而假设map有M个,在归约的阶段只有M x N个,这个结果是可以接受的并不会造成性能瓶颈。 这个TopN算法在map阶段将使用TreeMap来实现排序,以到达可…

 

 

简介

  TopN算法是一个经典的算法,由于每个map都只是实现了本地的TopN算法,而假设map有M个,在归约的阶段只有M x N个,这个结果是可以接受的并不会造成性能瓶颈。

  这个TopN算法在map阶段将使用TreeMap来实现排序,以到达可伸缩的目的。

  当然算法有两种,一种是唯一键,就是说key的类型是唯一的(是指在比较的实际阶段),比如本篇就是唯一键的TopN实现;

  另一种就是非唯一键,比如key值可能会有A、B、C三种,然后分别对他们求TopN,当然,我们假设数据是混在一起的,非唯一键方面的内容,将会写到另一篇博客上。

  进入正题

 

 

 

 

 

一、输入、期望输出、思路。

由于是唯一键实际上与排序有关的只是value部分,我们大可以简单点,输入数据为一列数字好了。

TopN.txt内容如下:

20 78 56 45 23 15 12 35 79 68 98 63 111 222 333 444 555

但我们设置N=10时,期望输出为:

555
444
333
222
111
98
79
78
68
63

思路嘛,在简介部分已经说的很清楚了,没必要再赘述了,直接上代码:

 

 

 

 

 

2.用Java编写MapReduce程序实现TopN:

为了能够真正意义上的称为TopN,这里在context里设置了N的值。所以在输入参数的时候也许相应的增加!

package TopN;import java.io.IOException;
import java.util.StringTokenizer;
import java.util.TreeMap;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
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.output.FileOutputFormat;public class TopN {public static class TopTenMapper extendsMapper<Object, Text, NullWritable, IntWritable> {private TreeMap<Integer, String> repToRecordMap = new TreeMap<Integer, String>();public void map(Object key, Text value, Context context) {int N = 10; //默认为Top10N = Integer.parseInt(context.getConfiguration().get("N"));StringTokenizer itr = new StringTokenizer(value.toString());while (itr.hasMoreTokens()) {repToRecordMap.put(Integer.parseInt(itr.nextToken()), " ");if (repToRecordMap.size() > N) {repToRecordMap.remove(repToRecordMap.firstKey());}}}protected void cleanup(Context context) {for (Integer i : repToRecordMap.keySet()) {try {context.write(NullWritable.get(), new IntWritable(i));} catch (Exception e) {e.printStackTrace();}}}}public static class TopTenReducer extendsReducer<NullWritable, IntWritable, NullWritable, IntWritable> {private TreeMap<Integer, String> repToRecordMap = new TreeMap<Integer, String>();public void reduce(NullWritable key, Iterable<IntWritable> values,Context context) throws IOException, InterruptedException {int N = 10; //默认为Top10N = Integer.parseInt(context.getConfiguration().get("N"));for (IntWritable value : values) {repToRecordMap.put(value.get(), " ");if (repToRecordMap.size() > N) {repToRecordMap.remove(repToRecordMap.firstKey());}}for (Integer i : repToRecordMap.descendingMap().keySet()) {context.write(NullWritable.get(), new IntWritable(i));}}}public static void main(String[] args) throws Exception {if (args.length != 3) {throw new IllegalArgumentException("!!!!!!!!!!!!!! Usage!!!!!!!!!!!!!!: hadoop jar <jar-name> "+ "TopN.TopN "+ "<the value of N>"+ "<input-path> "+ "<output-path>");}Configuration conf = new Configuration();conf.set("N", args[0]);Job job = Job.getInstance(conf, "TopN");job.setJobName("TopN");Path inputPath = new Path(args[1]);Path outputPath = new Path(args[2]);FileInputFormat.setInputPaths(job, inputPath);FileOutputFormat.setOutputPath(job, outputPath);job.setJarByClass(TopN.class);job.setMapperClass(TopTenMapper.class);job.setReducerClass(TopTenReducer.class);job.setNumReduceTasks(1);job.setMapOutputKeyClass(NullWritable.class);// map阶段的输出的keyjob.setMapOutputValueClass(IntWritable.class);// map阶段的输出的value
job.setOutputKeyClass(NullWritable.class);// reduce阶段的输出的keyjob.setOutputValueClass(IntWritable.class);// reduce阶段的输出的value
System.exit(job.waitForCompletion(true) ? 0 : 1);}}

 

 

 

 

 

 

 

 

 

 

3.用Scala写Spark程序实现TopN:

依然简洁的代码:

package spark
import org.apache.spark.{ SparkContext, SparkConf }
import org.apache.spark.rdd.RDD.rddToOrderedRDDFunctions
import org.apache.spark.rdd.RDD.rddToPairRDDFunctions
object TopN {def main(args: Array[String]) {var N = 10 //这里指定N的值val conf = new SparkConf().setAppName(" TopN ").setMaster("local")var sc = new SparkContext(conf)sc.setLogLevel("Warn")val file = sc.textFile("e:\\TopN.txt")val rdd = file.flatMap(_.split(" ")).map(x => (x.toInt, null)).sortByKey(false).map(_._1).take(N).foreach { println }}
}

 

http://www.lbrq.cn/news/1267453.html

相关文章:

  • 怎么制作简易网页/seo实战密码在线阅读
  • 网站建设分金手指专业十三/建设一个网站的具体步骤
  • 建设党建宣传网站 提升/知名的网络推广
  • 做网站定金交多少合适/网站设计方案模板
  • 软件测试三个月骗局/小红书笔记关键词排名优化
  • 掼蛋网站建设/友链价格
  • 有哪些网站做国外生意的/东莞做网站的公司有哪些
  • 基于漏斗模型网站关键路径分析/一键seo提交收录
  • 如何做商业网站推广/厦门百度代理
  • 新公司网站建设/软件培训机构排行榜
  • 怎么进入国外网站/百度分析
  • 做暧暧小视频网站/优化疫情防控 这些措施你应该知道
  • 微信上浏览自己做的网站/北京关键词优化平台
  • 自己做网站需要什么软件/企业网站建设公司
  • 网站视频开发平台/友情链接怎么连
  • 做阿拉伯语的网站/公司官网优化方案
  • facebook做网站推广/百度客户端下载安装
  • 诸暨网站制作/谷歌浏览器下载安装2021最新版
  • perl网站开发/友情链接交换网址大全
  • 互助平台网站建设/上海seo公司
  • 佛山新网站制作渠道/发布
  • 深圳正规网站建设服务/好的竞价账户托管外包
  • lnmp搭建wordpress/北京seo专业团队
  • 网站架构建设/泉州百度竞价开户
  • 教育培训机构网站建设/nba最新消息交易
  • 中国建设银行徐州分行网站/百度登陆页面
  • 低调赚大钱的灰色行业/江苏泰州seo网络优化推广
  • 做博彩网站的虚拟空间/优质的seo快速排名优化
  • wordpress中文 插件/吉林刷关键词排名优化软件
  • wap手机网站模板/网络推广策划书
  • 信创及一次ORACLE到OB的信创迁移
  • 更换KR100门禁读头&主机
  • ubuntu24.04安装selenium、chrome、chromedriver
  • IDM下载失败排查
  • Java 学习笔记:常用类、String 与日期时间处理
  • 从游戏NPC到手术助手:Agent AI重构多模态交互,具身智能打开AGI新大门