Spark学习进度7-综合案例
综合案例
文件排序

解法:
1.读取数据
2.数据清洗,变换数据格式
3.从新分区成一个分区
4.按照key排序,返还带有位次的元组
5.输出
@Test
def filesort(): Unit ={
val source=sc.textFile("dataset/filesort.txt",3)
var index=0
/*
partitionBy:把所有的分区相关的数据组成一个新的分区
HashPartitioner(1):分成一个分区,使得在一个分区内总体有序
*/
val result= source.filter(_.trim().length>0).map(n => (n.trim.toInt,""))
.partitionBy(new HashPartitioner(1))
.sortByKey().map( t=> {
index+=1
(index,t._1)
})
result.foreach(println(_))
}
二次排序
题目大意:先按照第一个比,相同则按照第二个比
题意思路:
1.读取数据
2.转换格式如下

可用图片展示:

class SecondarySortKey(val first:Int,val second:Int) extends Ordered
[SecondarySortKey] with Serializable{ override def compare(that: SecondarySortKey): Int = {
if(this.first-that.first!=0){
this.first-that.first
}else {
this.second-that.second
}
}
}
//二次排序
@Test
def sortsecond(): Unit ={ val source=sc.textFile("dataset/secondsort.txt",3)
val secondrdd = source.map(item => (new SecondarySortKey(item.split(" ")(0).toInt, item.split(" ")(1).toInt), item))
.partitionBy(new HashPartitioner(1))
secondrdd.sortByKey(false)
.map(item => item._2)
.foreach(println(_)) }
连接操作
案例介绍:
有两个表:movie表,和score表
score:包含的信息为:用户ID,电影ID,电影评分
movie:电影ID,电影名字
我们想要得到,评分超过4分的(电影ID,电影名字,电影评分)
思路如下:
首先先弄score表:
1.获取想要的信息
2.获取对应电影ID的平均值
3.更换格式:keyBy,如下

对于movie表进行连接,连接前需要变化下格式

然后可通过相同的key进行连接join,后的结果如下:

进行评分的过滤,然后取出需要的数据
@Test
/*
score:包含的信息为:用户ID,电影ID,电影评分
movie:电影ID,电影名字
*/
def joinTest(): Unit ={
val scoreRDD=sc.textFile("dataset/score.txt")
.map(line => {
val filed=line.split(",")
(filed(1).toInt,filed(2).toDouble)
})
.groupByKey()
.map(data =>{
val avg=data._2.sum/data._2.size
(data._1,avg)
})
.keyBy(it =>it._1) val movie=sc.textFile("dataset/movie.txt")
.map(line => {
val filed=line.split(",")
(filed(0).toInt,filed(1))
})
.keyBy(it =>it._1) scoreRDD.join(movie)
.filter(item => item._2._1._2>4.0)
.map(it => (it._1,it._2._2._2,it._2._1._2))
.foreach(println(_))
}
输出:
score表:

movie表:

最终输出:

Spark学习进度7-综合案例的更多相关文章
- Spark学习进度11-Spark Streaming&Structured Streaming
Spark Streaming Spark Streaming 介绍 批量计算 流计算 Spark Streaming 入门 Netcat 的使用 项目实例 目标:使用 Spark Streaming ...
- Spark学习进度-Spark环境搭建&Spark shell
Spark环境搭建 下载包 所需Spark包:我选择的是2.2.0的对应Hadoop2.7版本的,下载地址:https://archive.apache.org/dist/spark/spark-2. ...
- Spark学习进度-实战测试
spark-shell 交互式编程 题目:该数据集包含了某大学计算机系的成绩,数据格式如下所示: Tom,DataBase,80 Tom,Algorithm,50 Tom,DataStructure ...
- SparkSQL学习进度9-SQL实战案例
Spark SQL 基本操作 将下列 JSON 格式数据复制到 Linux 系统中,并保存命名为 employee.json. { "id":1 , "name&quo ...
- Spark学习进度10-DS&DF基础操作
有类型操作 flatMap 通过 flatMap 可以将一条数据转为一个数组, 后再展开这个数组放入 Dataset val ds1=Seq("hello spark"," ...
- Spark学习进度-RDD
RDD RDD 是什么 定义 RDD, 全称为 Resilient Distributed Datasets, 是一个容错的, 并行的数据结构, 可以让用户显式地将数据存储到磁盘和内存中, 并能控制数 ...
- Spark学习进度-Transformation算子
Transformation算子 intersection 交集 /* 交集 */ @Test def intersection(): Unit ={ val rdd1=sc.parallelize( ...
- spark 学习路线及参考课程
一.Scala编程详解: 第1讲-Spark的前世今生 第2讲-课程介绍.特色与价值 第3讲-Scala编程详解:基础语法 第4讲-Scala编程详解:条件控制与循环 第5讲-Scala编程详解:函数 ...
- 【原创 Hadoop&Spark 动手实践 13】Spark综合案例:简易电影推荐系统
[原创 Hadoop&Spark 动手实践 13]Spark综合案例:简易电影推荐系统
随机推荐
- jquery 执行a 标签 点击事件 跳转href 路径
<a href="./export.pdf" id="pdfdown" download="文件名.pdf">下载</a& ...
- Codeforces Edu Round 61 A-C + F
A. Regular Bracket Sequence 显然,"\(()\)"不影响结果它是自我匹配的,可以把所有的\(((\)和\())\)都放在左边/右边,这样只要检查它们的数 ...
- eclipse 搭建连接 activemq
今天我特地写下笔记,希望可以完全掌握这个东西,也希望可以帮助到任何想对学习这个东西的同学. 1.下载activemq压缩包,并解压(如果需要下载请看文章尾部附录) 2.进入bin文件夹,(64位电脑就 ...
- 记一次storm提交任务遇到的坑
摘要:主要是自己没有真正理解storm jar命令参数的意义. 情景复现: 在storm集群中使用命令提交后,在UI界面中,一直看不见任务提交上来的任务,但是在集群提交的shell界面中,是可以看到相 ...
- 后台运行程序nohup的使用
linux后台运行程序 nohup python3 test.py >output 2>&1 & 参数解释 用途:不挂断地运行命令. 语法:nohup Command [ ...
- JQuery统一复写美化项目中所有radio单选按钮样式
老项目要升级改版,对于分散在各页面的样式不好处理,怕有遗漏,尤其是优化input表单,修改其默认样式,接下来,我将给大家分享一下,我在项目中的总结. 效果 上代码: 1.简单搞一搞 CSS,此处代码有 ...
- Java源码赏析(六)Class<T> 类
目的 Class 类是每一个程序员都必须了解的,也是使用反射机制的基础. 这篇文章将Class 类的公共方法大致介绍了一遍(省略了安全.枚举.断言.注解相关代码). 代码 package java.l ...
- 算法(Java实现)—— 动态规划算法
动态规划算法 应用场景-0-1背包问题 背包问题:有一个背包,容量为4磅,现有物品如下 物品 重量 价格 吉他(G) 1 1500 音响(S) 4 3000 电脑(L) 3 2000 要求: 达到目标 ...
- Python高级语法-对象实例对象属性-Property总结(4.6.2)
@ 目录 1.说明 2.代码 关于作者 1.说明 property属性,返回的是值 不是callable的,也就是不能使用方法来调用 只能传入self,不能传入其他 用处,能返回局部数据,比如当分页的 ...
- 一个小技巧助您减少if语句的状态判断
作者:依乐祝 首发地址:https://www.cnblogs.com/yilezhu/p/14174990.html 在进行项目的开发的过程中, if 语句是少不了的,但我们始终要有一颗消灭 if ...