网站首页 > 技术文章 正文
这个章节说起来非常简单,就是用Hadoop或者Spark来解决TopN。
这个章节详细的提出了几种方法解决这个问题。我们来看一下,直接上答案。
- 假设输入键都是唯一的,也即给定的输入集合{(K,V)},所有的K都是唯一的,用Mapreduce/Hadoop方法
- 假设输入键都是唯一的,也即给定的输入集合{(K,V)},所有的K都是唯一的,用spark方法
- 假设输入键都不是唯一的,也即给定的输入集合{(K,V)},K是有重复的,用spark强大的排序算法top()函数和takeOrdered()等
Java计算TopN
Java中实现Top N的方法最常用的是适用SortedMap<K,V>和TreeMap<K,V>,然后将L的所有元素增加到topN中,如果topN.size()>N,则删除第一个元素或最后一个元素。
基于MapReduce实现的键唯一方法
重写setup和cleanup函数,这里两个函数在每次启动映射器都会执行一次,setup用于获取N的值,cleanup用于发射每个映射器的TOP N到reduce端。
Map函数,完成分区的TopN求值
Reduce函数,完成所有的TopN求值
驱动程序类TopNDriver.java
查找Top 10 和 Bottom 10
基于Spark实现的键唯一方法
Java API使用的spark函数类
在spark中使用setUp()和cleanUp()
采用spark实现TopN
全局指定TopN 参数
- 定义broadcastTopN:final Broadcast<Integer> broadcastTopN = context.broadcast(topN)
- 获取N的值:final int topN = broadcastTopN.value();
基于Spark实现的键不唯一的方法
算法过程
- 要保证K是唯一的,要把输入映射到JavaPairRDD<K,V>对,然后交给reduceByKey()
- 将所有唯一的(K,V)对划分为M个分区
- 找到各个分区的TopN (本地TopN)
- 找出所有本地TopN的最终TopN
基于Spark实现的非唯一键方法
基于takeOrdered实现的键不唯一的方法
当然你还可以使用scala实现,这里就不写了。
猜你喜欢
- 2025-09-28 某公司程序员每天划水,为何绩效反而更高?原来每天都专门写BUG
- 2025-09-28 解决前端竞态问题的乐观锁机制_乐观锁java
- 2024-12-22 77% 的 Linux 运维都不懂的内核问题,这篇全告诉你了
- 2024-12-22 男科不及格?这种舌头前端塌陷的舌象,问题在肺不在肾!
- 2024-12-22 啥?线上css样式错乱了?我本地运行没问题啊!
- 2024-12-22 使用Axios 拦截器解决「 前端并发冲突 」 问题
- 2024-12-22 前端面试常见问题 有使用过vue吗?说说你对vue的理解
- 2024-12-22 web前端54道题面试题的问题集合 2020web前端面试题
- 2024-12-22 前端既然已经内卷了,为什么公司还是招不到人?问题在哪?
- 2024-12-22 礼县纪委:抓好“前端”工作 着力发现问题
你 发表评论:
欢迎- 09-28前端同学狂喜_前端gui
- 09-28默认选择 React,等于是在扼杀前端创新
- 09-28《前端研发规范》+配置文件_前端开发规范
- 09-28JavaScript 常用事件大全:从基础到实战应用
- 09-28快看!百度提前批的面试难度,你能拿下吗?
- 09-28找工作速看!今日最新热招岗位全曝光
- 09-28Vue3+ElementPlus 免费后台管理模板VueNextAdmin
- 09-28前端开发的物理外挂来了,爽到飞起!
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- oracle面试 (55)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)