数据算法——Spark的TopN实现
1.scala实现:
/*** TOPN:维持一个定长数组,先塞满,然后把剩下的逐个对应数组中的元素,* 有大的就把小的弹出去,大的加进来,并移动位置来重新排序*/
object TopN {def main(args: Array[String]): Unit = {val session = SparkSession.builder().master("local").appName("topn").getOrCreate()val sc = session.sparkContextval lines = sc.textFile("data/scores")val pairInfo = lines.map(one=>{(one.split(" ")(0),one.split(" ")(1).toInt)})pairInfo.groupByKey().map(tp=>{val className = tp._1val iterator = tp._2.iteratorval top3 = new Array[Int](3)//定长val loop = new Breaks//相当于java中的breakwhile (iterator.hasNext){val currentOne = iterator.next()loop.breakable{ //里面break,就回到这//整个过程都将围绕着这个长度为3的定长数组展开for (i<-0 until top3.size){//先把定长数组塞满if (top3(i)==0){top3(i)=currentOneloop.break()}else if(currentOne>top3(i)){//开始拿剩下的元素跟数组中的比较0、1、2for (j<-2 until(i,-1)){top3(j)=top3(j-1)//开始挪地方了,比如:i=0,表示新值要插入在0号位,把1号位的值挪到2号,0号位的旧值挪到1号位}top3(i)=currentOne//把这个新成员插入进来loop.break()//插入一次,跳出重新再来下一轮}}}}(className,top3.toBuffer)}).collect().foreach(println)}
}
2.Java实现:
public class TopN {public static void main(String[] args) {SparkConf sparkConf = new SparkConf();sparkConf.setMaster("local");sparkConf.setAppName("topn");JavaSparkContext sc = new JavaSparkContext(sparkConf);JavaRDD<String> lines = sc.textFile("data/scores");JavaPairRDD<String, Integer> pairRDD = lines.mapToPair(new PairFunction<String, String, Integer>() {@Overridepublic Tuple2<String, Integer> call(String s) throws Exception {return new Tuple2<String, Integer>(s.split(" ")[0], Integer.valueOf(s.split(" ")[1]));}});pairRDD.groupByKey().foreach(new VoidFunction<Tuple2<String, Iterable<Integer>>>() {@Overridepublic void call(Tuple2<String, Iterable<Integer>> tp) throws Exception {String className = tp._1;Iterator<Integer> iter = tp._2.iterator();Integer[] top3 = new Integer[3];while (iter.hasNext()){Integer currentOne = iter.next();for (int i = 0; i < 3; i++) {if (top3[i]==null){top3[i]=currentOne;break;}else if(currentOne>top3[i]){for (int j = 2; j >i; j--) {top3[j]=top3[j-1];}top3[i]=currentOne;break;}}}for (Integer i:top3){System.out.println("className="+className+";value="+i);}}});}
}
数据算法——Spark的TopN实现相关推荐
- 数据算法——Spark二次排序
1.Scala实现: /*** 二次排序:超过2列(特征)* 对比MR天气案例,自定义一个key(包含读到的一行数字),对key进行内部比较.*/ object SecondSort {def mai ...
- [Spark的TopN算法实现]
一.TopN算法 MapReduce中的TopN算法是一个经典的算法,由于每个map都只是实现了本地的TopN算法,而假设map有M个,在归约的阶段只有M x N次运算,这个结果是可以接受的并不会造成 ...
- spark的数三角形算法_数据算法 Hadoop Spark大数据处理技巧 PDF 下载
相关截图: 资料简介: 本书介绍了很多基本设计模式.优化技术和数据挖掘及机器学习解决方案,以解决生物信息学.基因组学.统计和社交网络分析等领域的很多问题.这本书还概要介绍了MapReduce.Hado ...
- 《大数据算法》一1.2 大数据算法
本节书摘来华章计算机<大数据算法>一书中的第1章 ,第1.2节,王宏志 编著, 更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1.2 大数据算法 这一节我们概 ...
- HQL写topN、Spark写topN
HQL写topN用窗口函数rank() .row_number().dense_rank() 1.rank(),跳跃排序,假如第一第二相同,那么第三个就是3 select * from( select ...
- 【大数据】Spark面试100问 | CSDN博文精选
戳蓝字"CSDN云计算"关注我们哦! 作者 | 游骑小兵 责编 | 阿秃 Q:什么是Spark? A:简单理解,Spark是在Hadoop基础上的改进,是UC Berkeley ...
- 大数据自学——Spark
Spark自学之路 Spark基础--思维导图 #1.1Spark是什么 Apache Spark 是一个快速的,多用途的计算系统,相对于Hadoop MapReduce将中间结果保存在磁盘中,Spa ...
- 漫画趣解大数据算法建模:买瓜
大数据开发如何转型算法? 算法建模主要做什么?调参为什么玄学? 如何通俗理解算法建模过程.. 夕阳下的村东头,有一人来买瓜. 1 引子(买瓜) 忙碌的一天刚刚结束,村里的小张就匆匆的骑上车,准备买个西 ...
- 大数据算法培养计划!
立春节气已经过去了一个多月,但职场却迎来了真正的就业寒冬."旺季不旺" ,职场人期待在年后招聘季实现的跳槽.涨薪.转行,只能被暂时搁置. 根据智联招聘最新发布的调研数据来看:春节后 ...
最新文章
- 将不确定变成确定~frameset页面不能正确加载
- CentOS基础网络配置路由和默认网关
- subsonic mysql_Subsonic 介绍
- c语言图片见水印,[求助]C语言 bmp文件加上水印
- HDU 1492 The number of divisors(约数) about Humble Numbers(数论,简单约数)
- shell脚本中数组的长度表示
- kudu :impala 和 kuduClient 的选择
- 上传文件到某文件夹时,提示...路径访问被拒绝
- 概率图模型笔记(三)条件随机场(CRF)基础
- Linux命令之dos2unix - 将DOS格式文本文件转换成UNIX格式
- paroot忘记root密码
- 论文笔记_S2D.59_2015-ICRA_V-LOAM_低漂移、鲁棒和快速的视觉-激光 里程计和建图
- 大数据概览以及当下实用的主流开发
- vivo 应用商店推荐系统探索与实践
- BeautifulSoup总结及contents内容分析
- Android-AIUI技能设计技巧及处理策略总结
- javaWeb(b站狂神说)
- 怎么点亮段码屏_段码LCD液晶屏驱动方法
- JQuery中closet、toggleClass、removeClass、addClass理解
- 阿里云 云盾 安骑士 监控ECS离线 安全组规则 ip设置
热门文章
- labview波形图两个游标,LabVIEW数据可视化:使用波形图表控件逐点显示曲线的方法...
- python写端口扫描器_使用Python编写简单的端口扫描器的实例分享
- 关于如何用100行如何实现docker
- IntelliJ IDEA Community 社区版配置 Web 开发环境(Gradle + Tomcat)
- sql insert and update
- parasoft Jtest 使用教程:创建并使用参数化测试用例(上)
- express 的 middleware 设计
- 虚拟化之安装Xen实例
- 常用的shell脚本案例(14.04.15更新)
- Linux下安装Tomcat