11、TopN实战

1、Java版本:

1.1、取前3

package sparkcore.java;

import java.util.List;

import org.apache.spark.SparkConf;

import org.apache.spark.api.java.JavaPairRDD;

import org.apache.spark.api.java.JavaRDD;

import org.apache.spark.api.java.JavaSparkContext;

import org.apache.spark.api.java.function.Function;

import org.apache.spark.api.java.function.PairFunction;

import scala.Tuple2;

/**

* 取前3

*/

public class Top3 {

public static void main(String[] args) {

SparkConf conf = new SparkConf()

.setAppName("Top3")

.setMaster("local");

JavaSparkContext sc = new JavaSparkContext(conf);

/*

3

5

6

7

1

4

5

6

9

0

3

*/

JavaRDD<String> lines = sc.textFile("top.txt");

JavaPairRDD<Integer, String> pairs = lines.mapToPair(

new PairFunction<String, Integer, String>() {

private static final long serialVersionUID = 1L;

@Override

public Tuple2<Integer, String> call(String t) throws Exception {

return new Tuple2<Integer, String>(Integer.valueOf(t), t);

}

});

JavaPairRDD<Integer, String> sortedPairs = pairs.sortByKey(false);

JavaRDD<Integer> sortedNumbers = sortedPairs.map(

new Function<Tuple2<Integer,String>, Integer>() {

private static final long serialVersionUID = 1L;

@Override

public Integer call(Tuple2<Integer, String> v1) throws Exception {

return v1._1;

}

});

List<Integer> sortedNumberList = sortedNumbers.take(3);

for(Integer num : sortedNumberList) {

System.out.println(num);

}

sc.close();

}

}

输出:

9

7

6

1.2、每组内取top3

package sparkcore.java;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.Collections;

import java.util.Comparator;

import java.util.Iterator;

import java.util.List;

import org.apache.spark.SparkConf;

import org.apache.spark.api.java.JavaPairRDD;

import org.apache.spark.api.java.JavaRDD;

import org.apache.spark.api.java.JavaSparkContext;

import org.apache.spark.api.java.function.PairFunction;

import org.apache.spark.api.java.function.VoidFunction;

import scala.Tuple2;

/**

* 每组内取top3

*/

public class GroupTop3 {

public static void main(String[] args) {

SparkConf conf = new SparkConf().setAppName("Top3").setMaster("local");

JavaSparkContext sc = new JavaSparkContext(conf);

/*

class1 90

class2 56

class1 87

class1 76

class2 88

class1 95

class1 74

class2 87

class2 67

class2 77

*/

JavaRDD<String> lines = sc.textFile("score.txt");

JavaPairRDD<String, Integer> pairs = lines.mapToPair(

new PairFunction<String, String, Integer>() {

private static final long serialVersionUID = 1L;

@Override

public Tuple2<String, Integer> call(String line) throws Exception {

String[] lineSplited = line.split(" ");

return new Tuple2<String, Integer>(lineSplited[0], Integer.valueOf(lineSplited[1]));

}

});

JavaPairRDD<String, Iterable<Integer>> groupedPairs = pairs.groupByKey();

JavaPairRDD<String, Iterable<Integer>> top3Score = groupedPairs.mapToPair(

new PairFunction<Tuple2<String, Iterable<Integer>>, String, Iterable<Integer>>() {

private static final long serialVersionUID = 1L;

@Override

public Tuple2<String, Iterable<Integer>> call(Tuple2<String, Iterable<Integer>> classScores)

throws Exception {

Integer[] top3 = new Integer[3];

String className = classScores._1;

Iterator<Integer> scores = classScores._2.iterator();

List<Integer> l = new ArrayList<Integer>();

while (scores.hasNext()) {

l.add(scores.next());

}

Collections.sort(l, new Comparator<Integer>() {

public int compare(Integer o1, Integer o2) {

return -o1.compareTo(o2);

}

});

for (int i = 0; i < l.size(); i++) {

if (i < 3) {

top3[i] = l.get(i);

}

}

return new Tuple2<String, Iterable<Integer>>(className, Arrays.asList(top3));

}

});

top3Score.foreach(new VoidFunction<Tuple2<String, Iterable<Integer>>>() {

private static final long serialVersionUID = 1L;

@Override

public void call(Tuple2<String, Iterable<Integer>> t) throws Exception {

System.out.println("class: " + t._1);

Iterator<Integer> scoreIterator = t._2.iterator();

while (scoreIterator.hasNext()) {

Integer score = scoreIterator.next();

System.out.println(score);

}

System.out.println("=======================================");

}

});

sc.close();

}

}

输出:

class: class1

95

90

87

=======================================

class: class2

88

87

77

=======================================

2、Scala版本:

2.1、取前3

package sparkcore.scala

import org.apache.spark.SparkConf

import org.apache.spark.SparkContext

object Top3 {

def main(args: Array[String]): Unit = {

val conf = new SparkConf()

.setAppName("Top3")

.setMaster("local")

val sc = new SparkContext(conf)

val lines = sc.textFile("top.txt", 1)

val pairs = lines.map { line => (line.toInt, line) }

val sortedPairs = pairs.sortByKey(false)

val sortedNumbers = sortedPairs.map(sortedPair => sortedPair._1)

val top3Number = sortedNumbers.take(3)

for (num <- top3Number) {

println(num)

}

}

}

输出:

9

7

6

2.2、每组内取top3

package sparkcore.scala

import org.apache.spark.SparkConf

import org.apache.spark.SparkContext

object GroupTop3 {

def main(args: Array[String]): Unit = {

val conf = new SparkConf()

.setAppName("Top3")

.setMaster("local")

val sc = new SparkContext(conf)

val lines = sc.textFile("score.txt", 1)

val linePair = lines.map((line => (line.split(" ")(0), line.split(" ")(1).toInt)))

val groupRdd = linePair.groupByKey()

val sortRdd = groupRdd.map(g => (g._1,

g._2.toList.sorted(new Ordering[Int]() {

def compare(x: Int, y: Int): Int = {

- x.compare(y)

}

}).take(3)))

sortRdd.foreach(e => println(e._1 + " : " + e._2))

}

}

输出:

class1 : List(95, 90, 87)

class2 : List(88, 87, 77)

时间: 2024-11-05 16:37:07

11、TopN实战的相关文章

Android开发不得不看的11个实战小项目

是不是想学Android开发(http://www.maiziedu.com/course/android-px/)却不知道如何下手?懂得一点点入门基础知识却无法应用到实际开发中?看相关资料觉得都懂了实际动手却发现什么都不懂?本地搭建Android开发环境太麻烦? 如果你有以上的各种问题,那么今天小编推荐的Android开发的这11个小项目,你一定要看!! 因为,这些实战项目都是基于google 官方的API Demos制作而成,而且全部配有Android在线开发环境,你可以随时动手跟着课程操作

Advanced Installer 11.0实战教程

Advanced Installer11.0实战教程 一个windows服务文件,打包成为一个安装程序,安装后可以自动启动服务:并且在桌面上建立快捷方式,用于查看日志文件及安装目录. 1.新建专业的项目工程. 2.输入产品名称等信息 其中产品名称后面作为安装目录的名称: 3.输入安装参数 应用程序的文件夹等: 4.输入安装条件 本示例中需要.netframework2.0程序,选择后会自动下载必要的程序. 5.设置启动条件 6.设置文件 这里可以选择安装程序需要的文件,本示例有四个文件.同时可以

verilog学习(11)实战之计数器

一:纹波计数器 1:纹波计数器的面积最小,易于结构化实现.这种计数器的触发器是前一级输出数据的边沿作为时钟来驱动.前一级的输出连在后一级的时钟端,每当时钟的输入端口的数据产生了上升沿,输出就会翻转.这个计数器必须从一个确定的状态开始工作,这要求我们要对它复位,否则,计数器的翻转则没有意义.3比特的纹波计数器如下图所示,输出位Q[0],Q[1],Q[2](图中未标出) 2:代码(4bit纹波计数器) vcs dump的波形 可见,毛刺很大:这是因为纹波计数器中高阶触发器没有时钟,只有等到低阶触发器

(升级版)Spark从入门到精通(Scala编程、案例实战、高级特性、Spark内核源码剖析、Hadoop高端)

本课程主要讲解目前大数据领域最热门.最火爆.最有前景的技术——Spark.在本课程中,会从浅入深,基于大量案例实战,深度剖析和讲解Spark,并且会包含完全从企业真实复杂业务需求中抽取出的案例实战.课程会涵盖Scala编程详解.Spark核心编程.Spark SQL和Spark Streaming.Spark内核以及源码剖析.性能调优.企业级案例实战等部分.完全从零起步,让学员可以一站式精通Spark企业级大数据开发,提升自己的职场竞争力,实现更好的升职或者跳槽,或者从j2ee等传统软件开发工程

J2EE开发实战基础系列之开卷有益

时隔七年再次接触培训有关的事情,是兴奋,更多的是恐惧,不知该如何下手. 本系列针对有Java语法基础的开发者或者爱好者,从工作开发角度出发讲解,不同于其他视频,一切皆以实用为主,过程中如有疑问,请提问于我,回答将发布在教程中添加提问部分,提问者越多,教程覆盖越全面,以实际问题为主. ----------------------------------------------------------------------------------------- 首先介绍下目前J2EE方面培训的入门

009.实战案例::产品设计实例精解

1.实战案例1 2.实战案例2 3.实战案例3 4.实战案例4 5.实战案例5 6.实战案例6 7.实战案例7 8.实战案例8 9.实战案例9 10.实战案例10 11.实战案例11 12.实战案例12 13.实战案例13 14.实战案例14 15.实战案例15 16.实战案例16 17.实战案例17 18.实战案例18 19.实战案例19:工兵铲 20.实战案例20 21.实战案例21 22.实战案例22 23.实战案例23 24.实战案例24 25.实战案例25 25.实战案例:25V型带轮

基于PHP实战ThinkSNS V3二次开发

基于PHP实战ThinkSNS V3二次开发(系统架构.网站定制化开发.问答系统开发) 课程分类:PHP 适合人群:中级 课时数量:25课时 服务类型:C类(普通服务类课程) 用到技术:PHP.ThinkSNS V3二次开发 涉及项目:ThinkSNS V3二次开发.问答系统 咨询QQ:1840215592 课程内容简介: 由于ThinkSNS产品提供了完整的微博及系统功能,并提供了非常友好的二次开发规范.越多越多的企业和开发人员选择使用ThinkSNS构建成熟的SNS企业网站和商业项目.本课程

最新短视频网站实战教程 node.js+ES+Koa2基础到精通项目实战课程

下载地址:百度网盘下载 node.js+ES+Koa2项目实战课,课程目录很多,只展示了主要章节课程目录第1章 2018 年的编程姿势1-0 课前必看.mp41-1 koa2导学.mp41-2 安装跟进最新 node.js 版本.mp41-3 毫不犹豫的使用promise.mp41-4 使用babel 编译es7 async function.mp4 第2章 必会 ES6-7 语法特性与规范2-0 课前必读.mp42-1 生成器函数.mp42-2 co 库执行 promise 和 generat

实战 node.js+ES+Koa2基础到精通项目

node.js+ES+Koa2项目实战课,课程目录很多,只展示了主要章节课程目录第1章 2018 年的编程姿势1-0 课前必看.mp41-1 koa2导学.mp41-2 安装跟进最新 node.js 版本.mp41-3 毫不犹豫的使用promise.mp41-4 使用babel 编译es7 async function.mp4第2章 必会 ES6-7 语法特性与规范2-0 课前必读.mp42-1 生成器函数.mp42-2 co 库执行 promise 和 generator function.m