【spark】示例:连接操作
我们有这样两个文件


任务:找出用户评分平均值大于4的电影。
我们看两个文件结果,第一个文件有电影的ID和名字,第二个文件有电影的ID和所有用户的评分
对于任务结果所需要的数据为电影ID,电影名字,平均评分。平均评分用所有用户评分总和/用户数来求出
1.我们先计算电影的评分
(1)先读取电影评分文件

(2)取数据
我们看到每行的数据是通过::来进行连接的,然后我们需要的是第二列的电影ID以及第二列的评分。
我们把两个有用的数据取出来,组成键值对的形式。
为什么要组成键值对的形式?
数据中每个用户的对电影的评分都是分开的,所以我们需要对电影ID进行分组操作,把所有评分分组。
之前示例中我们知道groupByKey能进行分组,同时还能把所有相同Key的数据组合成一个集合。
当我们把所有数据集合之后就很容易操作计算了。
所以我们把数据组合成为<电影ID,评分>这样的键值对的形式。

3.分组计算平均评分

我们看到我们分组之后,所有相同电影的不同用户的评分都被收集到了一个集合中。
那么如何计算平均评分呢?评分总分 / 评分个数 = 平均评分
Scala集合提供了sum方法来可以计算集合总和,提供了size方法来计算数据条数。
正好不用我们额外去求了,如果集合没有定义方法,我们也可以遍历后计算得出要求的值。

2.在取电影ID和电影名

我们查看数据结构,数据是通过::连接的,对我们有用的数据为第一列电影ID和第二列电影名称

3.通过电影ID连接
我们把我们所有需要的数据都取出来了,接下来进行连接就可以了。
但是,我们连接需要把电影ID作为连接的key。
我们需要的结果为(ID,NAME,SCORE)
如果我们直接对id进行连接的话,我们连接出来的结果只有(NAME,SCORE)缺少了ID
所以我们需要再次对数据进行处理,我们通过.keyBy()方法新生成一个key,同时value为原始的数据


然后我们再进行连接操作,注意join连接操作是内链接,
连接后的key是连接键,value为所有相同key的集合,可以通过 _2._x 来进行访问

4.过滤求出平均评分大于4的记录

【spark】示例:连接操作的更多相关文章
- Spark学习之路(十二)——  Spark SQL JOIN操作
		
一. 数据准备 本文主要介绍Spark SQL的多表连接,需要预先准备测试数据.分别创建员工和部门的Datafame,并注册为临时视图,代码如下: val spark = SparkSession.b ...
 - Spark 系列(十二)—— Spark SQL JOIN 操作
		
一. 数据准备 本文主要介绍 Spark SQL 的多表连接,需要预先准备测试数据.分别创建员工和部门的 Datafame,并注册为临时视图,代码如下: val spark = SparkSessio ...
 - Spark  Streaming连接TCP Socket
		
1.Spark Streaming是什么 Spark Streaming是在Spark上建立的可扩展的高吞吐量实时处理流数据的框架,数据可以是来自多种不同的源,例如kafka,Flume,Twitte ...
 - Spark 倾斜连接
		
[数据倾斜出现的原因] 并行计算中,我们总希望分配的每一个任务(task)都能以相似的粒度来切分,且完成时间相差不大.但是由于集群中的硬件和应用的类型不同.切分的数据大小不一,总会导致部分任务极大地拖 ...
 - RxJava操作符(09-算术/聚合操作&连接操作)
		
转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51692493 本文出自:[openXu的博客] 目录: 算术聚合 Count Concat ...
 - SQL 经典回顾:JOIN 表连接操作不完全指南
		
 2017-02-23 小峰 ITPUB 点击上方“蓝字”可以关注我们哦  |转载自:码农网 |原文链接:www.codeceo.com/article/sql-join-guide.html ...
 - 【Spark】RDD操作具体解释3——键值型Transformation算子
		
Transformation处理的数据为Key-Value形式的算子大致能够分为:输入分区与输出分区一对一.聚集.连接操作. 输入分区与输出分区一对一 mapValues mapValues:针对(K ...
 - JeePlus:代码生成器-生成示例(操作)
		
ylbtech-JeePlus:代码生成器-生成示例(操作) 1.返回顶部 1. 生成示例由以下部分组成 单表 主附表 树表 富文本 图片管理 自定义树组件 自定义Grid 多对多 左树右表 2. 2 ...
 - Spark之常用操作
		
-- 筛选 val rdd = sc.parallelize(List("ABC","BCD","DEF")) val filtered = ...
 
随机推荐
- 在启动MYSQL时出现问题:“ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)”
			
1.问题描述 在启动MYSQL时出现问题:"ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)& ...
 - JavaScript-4.2函数,变量作用域---ShinePans
			
<html> <head> <meta http-equiv="content-type" content="text/html;chars ...
 - centos7 vmware克隆解决网络问题
			
centos7克隆后,发现两台机子之间的MAC相同,无法获取IP.超找资料,解决办法如下: 只要删除网卡的配置文件中的HWADDR和UUID两行就行.使用ifup启动网卡即可.
 - boost noncopyable类
			
1. 当声明一个类时,编译器会自动为该类生成默认构造函数,复制构造函数,赋值操作符以及析构函数: 2.自动生成的各个函数和操作符都是public的: 3.当声明一个类不允许复制时,可以将一个类的复制构 ...
 - 解决 hybird 应用中重复获取 WebView,导致页面元素无法识别的问题
			
转载地址:http://blog.csdn.net/testman930/article/details/50799532 问题描述 在测APP的业务流,WebView和Native模式耦合在一起.例 ...
 - HTML布局--使用<div>元素
			
div元素是用于分组HTML元素的块级元素 上图代码示例如下: <!DOCTYPE html> <html lang="en"> <head> ...
 - go——结构
			
Go语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型.结构体是由一系列具有相同类型或不同类型的数据构成的数据集合. 结构体定义需要使用type和struct语句.str ...
 - IIS  Internet Information Service
			
Visual Studio 和 visio 都有的Web服务,IIS 发布的时候,直接可以用本机的IIS进行发布,Windos自带有Web服务,只需要配置一下,然后配上域名就OK了,简直太方便了 来自 ...
 - cdoj 秋实大哥搞算数
			
地址:http://acm.uestc.edu.cn/#/contest/show/95 题目: N - 秋实大哥搞算数 Time Limit: 3000/1000MS (Java/Others) ...
 - CodeForces - 986A Fair (BFS+贪心)
			
题意:有N个点M条边的无向图,每个点有给定的ai(1<=ai<=K,K<=200)表示该点拥有的物品编号,保证1-K在N个点全部出现.求每个点收集S个不同的物品所要走过的最短路程(边 ...