今天完成了老师布置的spark实验4的第一部分,使用的是之前未接触过的编程方式,格式也有很大不同。
实验 4 RDD 编程初级实践
一、实验目的
(1)熟悉 Spark 的 RDD 基本操作及键值对操作;
(2)熟悉使用 RDD 编程解决实际具体问题的方法。
二、实验平台
操作系统:Ubuntu16.04
Spark 版本:2.1.0
三、实验内容和要求
1.spark-shell 交互式编程
请到本教程官网的“下载专区”的“数据集”中下载 chapter5-data1.txt,该数据集包含
了某大学计算机系的成绩,数据格式如下所示:
Tom,DataBase,80
Tom,Algorithm,50
Tom,DataStructure,60
Jim,DataBase,90
Jim,Algorithm,60
Jim,DataStructure,80
……
请根据给定的实验数据,在 spark-shell 中通过编程来计算以下内容:
先新建文件夹sparkdata,将数据文件上传到目录/root/spark/sparkdata/Data01.txt下
(1)该系总共有多少学生;
首先获取该数据文件,用.split对数据文件进行分割并取每行的第一段数据,使用distinct去重,计算总数并输出。
(2)该系共开设来多少门课程;
该操作与上个操作基本一致,唯一的不同就是对数据进行分割时取每行的第二段数据。
(3)Tom 同学的总成绩平均分是多少;
先找到Tom的所有数据,截取出来并输出
然后截取数据取每行数据的第一段和最后一段并将最后一段定义为int类型,mapValues是对值的操作,不操作key使数据变成(Tom,(26,1))
接着需要按key进行reduce,让key合并当将Tom进行reduce后这里的(x,y) 表示的是(26,1)(12,1),然后对value进行操作,最后输出。
(4)求每名同学的选修的课程门数;
首先截取数据并取第一段和第二段数据,然后改变数据的值为(课程,1)
然后将按照key进行合并,将统一key的值相加,并取其值。
输出所有人的修课门数
(5)该系 DataBase 课程共有多少人选修;
使用filter记性数据的过滤,让课程等于database并计算数据的行数即可。
(6)各门课程的平均分是多少;
(7)使用累加器计算共有多少人选了 DataBase 这门课。