还是以经典案例Wordcount为例:
 
逻辑思路:
1.先把文本按空格切分成每个单词    flatMap()
2.将每个单词都转换成Tuple2类型(hello ,1)    map()
3.将key相同的次数相加(hello , 5)    reduceByKey()
4.将(hello , 5) 反转成(5 , hello)    map()
5.将反转好的RDD 通过key排序    sortByKey()
6.将排序好的RDD 再反转成(hello , 5)     map()
7.打印    foreach()
 
scala版本
/**
* sortwordcount 案例
* 通过单词出现的次数 倒序排序
*/
object SortWordCountScala { def main(args: Array[String]): Unit = {
//创建SparkContext sparkconf
val conf = new SparkConf()
.setAppName("sortWordCount")
.setMaster("local") val sc = new SparkContext(conf) //读取文件
val lines = sc.textFile("D:\\daima\\work\\1011\\spark-test-zhonghuashishan\\file\\data_syn.txt")
//原始Wordcount案例
val split = lines.flatMap(line => line.split(" "))
val map = split.map(m => (m ,))
val reduce = map.reduceByKey(_ + _ )
//将(you ,2 ) (hello ,3) 反转成(2 , you) (3 , hello)
val fanzhuan = reduce.map(r => (r._2 , r._1))
//通过key排序 sortByKey 参数为false :倒序(3 , hello) (2 , you)
val sort = fanzhuan.sortByKey(false)
//在将反转之后排序好的rdd在反转成:(hello ,3) (you , 2)
val put = sort.map(m => (m._2 , m._1))
//打印
put.foreach(p => println(p._1 +"单词"+p._2+"个数"))
}
}
 
 
Java版本
/**
* 排序的Wordcount程序
* 通过单词出现的次数 倒序排序
*/
public class SortWordCount {
public static void main (String [] args){ //创建sparkconf 和JavaSparkContext
SparkConf conf = new SparkConf()
.setAppName("SortWordCount")
.setMaster("local");
JavaSparkContext sc = new JavaSparkContext(conf); //创建linesrdd
JavaRDD<String> linesRDD = sc.textFile("D:\\daima\\work\\1011\\spark-test-zhonghuashishan\\file\\data_syn.txt"); //执行之前我们做过的单词计数
JavaRDD<String> stringJavaRDD = linesRDD.flatMap(new FlatMapFunction<String, String>() {
@Override
public Iterator<String> call(String s) throws Exception {
return Arrays.asList(s.split(" ")).iterator();
}
});
//给每个单词都拼成 (q,1)
JavaPairRDD<String, Integer> stringIntegerJavaPairRDD = stringJavaRDD.mapToPair(new PairFunction<String, String, Integer>() {
@Override
public Tuple2<String, Integer> call(String s) throws Exception {
return new Tuple2<String, Integer>(s, );
}
}); //结果为 (yu , 3) (hello ,2)
JavaPairRDD<String, Integer> stringIntegerJavaPairRDD1 = stringIntegerJavaPairRDD.reduceByKey(new Function2<Integer, Integer, Integer>() {
@Override
public Integer call(Integer integer, Integer integer2) throws Exception {
return integer + integer2;
}
}); //通过new Tuple2 将(yu , 3) (hello ,2) 反转成 (3 , yu) (2 , hello)
JavaPairRDD<Integer, String> integerStringJavaPairRDD = stringIntegerJavaPairRDD1.mapToPair(new PairFunction<Tuple2<String, Integer>, Integer, String>() {
@Override
public Tuple2<Integer, String> call(Tuple2<String, Integer> stringIntegerTuple2) throws Exception {
return new Tuple2<>(stringIntegerTuple2._2, stringIntegerTuple2._1);
}
}); //按照key进行排序 倒序 (3 , yu) (2 , hello)
JavaPairRDD<Integer, String> integerStringJavaPairRDD1 = integerStringJavaPairRDD.sortByKey(false); //将排序好的(3 , yu) (2 , hello) 反转成 (yu , 3) (hello ,2)
JavaPairRDD<String, Integer> stringIntegerJavaPairRDD2 = integerStringJavaPairRDD1.mapToPair(new PairFunction<Tuple2<Integer, String>, String, Integer>() {
@Override
public Tuple2<String, Integer> call(Tuple2<Integer, String> integerStringTuple2) throws Exception { return new Tuple2<String, Integer>(integerStringTuple2._2, integerStringTuple2._1);
}
}); //打印
stringIntegerJavaPairRDD2.foreach(new VoidFunction<Tuple2<String, Integer>>() {
@Override
public void call(Tuple2<String, Integer> stringIntegerTuple2) throws Exception {
System.out.println(stringIntegerTuple2._1 + "单词"+ stringIntegerTuple2._2 +"个数");
}
});
//关闭JavaSparkContext
sc.close();
}
}
 

小记--------spark-Wordcount经典案例之对结果根据词频进行倒序排序的更多相关文章

  1. Spark - 经典案例

    初识 Spark 大数据处理,目前还只是小白阶段,初步搭建起运行环境,慢慢学习之. 本文熟悉下 Spark 数据处理的几个经典案例. 首先将 Scala SDK 的源码导入 IDEA,方便查看和调试代 ...

  2. Spark之权威指南经典案例

    hadoop权威指南上有一个求历史最高温度的经典案例,源数据如下: -- sample.txt0067011990999991950051507004+68750+023550FM-12+038299 ...

  3. 王家林 大数据Spark超经典视频链接全集[转]

    压缩过的大数据Spark蘑菇云行动前置课程视频百度云分享链接 链接:http://pan.baidu.com/s/1cFqjQu SCALA专辑 Scala深入浅出经典视频 链接:http://pan ...

  4. 汇总java生态圈常用技术框架、开源中间件,系统架构及经典案例等

    转自:http://www.51testing.com/html/83/n-3718883.html 有人认为编程是一门技术活,要有一定的天赋,非天资聪慧者不能及也.非也,这是近几年,对于技术这碗饭有 ...

  5. javascript的理解及经典案例

    js的简介: JavaScript是一种能让你的网页更加生动活泼的程式语言,也是目前网页中设计中最容易学又最方便的语言. 你可以利用JavaScript轻易的做出亲切的欢迎讯息.漂亮的数字钟.有广告效 ...

  6. jQuery基础的工厂函数以及定时器的经典案例

    1. jQuery的基本信息:  1.1 定义: jQuery是JavaScript的程序库之一,它是JavaScript对象和实用函数的封装, 1.2 作用: 许多使用JavaScript能实现的交 ...

  7. Linux运维之道(大量经典案例、问题分析,运维案头书,红帽推荐)

    Linux运维之道(大量经典案例.问题分析,运维案头书,红帽推荐) 丁明一 编   ISBN 978-7-121-21877-4 2014年1月出版 定价:69.00元 448页 16开 编辑推荐 1 ...

  8. 经典案例:那些让人赞不绝口的创新 HTML5 网站

    在过去的10年里,网页设计师使用 Flash.JavaScript 或其他复杂的软件和技术来创建网站.但现在你可以前所未有的快速.轻松地设计或创造互动的.有趣好看的网站.如何创建?答案是 HTML5 ...

  9. Altera OpenCL用于计算机领域的13个经典案例(转)

    英文出自:Streamcomputing 转自:http://www.csdn.net/article/2013-10-29/2817319-the-application-areas-opencl- ...

随机推荐

  1. tar:文件打包归档

    造冰箱的大熊猫@cnblogs 2018/12/24 1.什么是tar 1.1.tar tar命令将指定的文件.文件夹打包(存储)为一个文件(归档文件,archive file).tar将被归档文件以 ...

  2. MySQL_8.0与5.7区别之账户与安全

    一.创建用户和用户授权 MySQL5.7创建用户和用户授权命令可以同时执行 grant all privileges on *.* to 'Gary'@'%' identified by 'Gary@ ...

  3. MySQL_(Java)提取工具类JDBCUtils

    MySQL_(Java)使用JDBC向数据库发起查询请求 传送门 MySQL_(Java)使用JDBC创建用户名和密码校验查询方法 传送门 MySQL_(Java)使用preparestatement ...

  4. 部分和问题(dfs)

    部分和问题 描述 给定整数a1.a2........an,判断是否可以从中选出若干数,使它们的和恰好为K. 输入 首先,n和k,n表示数的个数,k表示数的和.接着一行n个数.(1<=n<= ...

  5. spiderkeeper使用教程

    安装包 pip install scrapy pip install scrapyd pip install scrapyd-client pip install spiderkeeper 进入到sc ...

  6. spring boot 下 mapper接口与xml文件映射问题

    1. @MapperScan @MapperScan("com.streamax.ums.business.dao") 注解扫描的包路径是否有问题 2. 目录结构 mapper接口 ...

  7. SRS之SrsRtmpServer::connect_app详解

    1. connect('live') 2. SrsRtmpServer::connect_app 位于 srs_rtmp_stack.cpp.在 SRS 的 RTMP 连接处理线程 conn 中,当与 ...

  8. 在linux下通过ssh运行X图形软件

    服务器端:编辑/etc/ssh/sshd_config中的以下内容启用AllowTcpForwarding启用X11Forwarding将X11DisplayOffset设定为10. 启用X11Use ...

  9. find 命令详细解释

    命令格式:find pathname -options [-print -exec -ok ...] 命令参数: pathname: find命令所查找的目录路径.例如用.来表示当前目录,用/来表示系 ...

  10. NGUI中UILabel使用url标签的一个bug

    在NGUI里,UILabel控件可以支持一些简单功能的标签,使文本显示更丰富及实现类似超链接的功能.但是在使用的时候发现了NGUI3.5.9版本里存在着一个bug.不过还好修复这个bug也很简单. 在 ...