Spark-shell交互式编程(章鱼大数据实训平台),关于【学生-选课-成绩】数据的处理¥/(ㄒoㄒ)/~~
一、请根据给定的实验数据,在Spark-shell中通过编程解决以下问题:
1.问题:
(1)该系共有多少学生?
(2)该系共开设了多少门课程?
(3)Tom同学的总成绩为多少?
(4)每门课程选修的同学人数?
(5)每位同学选修的课程门数?
(6)该系的DataBase课程共有多少人选修?
2.下面提供我自己的课上的部分实验数据(截图):

3.问题解决:
@@@:首先应该导入所有数据
(1)统计学生总数?
Ⅰ.问题分析:a.示例数据表明学生人头有重复,所以需要去重统计学生人数。
Ⅱ.问题解决(代码截图):

Ⅲ.代码解析:a.代码中split()函数负责将字符串切片为一个列表,后面的(num)参数选择列表中的第一个元素。(转换)
b.代码中distinct()函数负责去重。(转换)
c.代码中count()函数负责统计人头数。(行动)
(2)该系共开设了多少门课程?
Ⅰ.问题分析:同上,去重+计数,但是要更改split函数参数,选择第二个元素。
Ⅱ.问题解决(代码截图):

Ⅲ.代码解析:a.同上,但是要更改split函数参数,选择第二个元素(课程)。
(3)求Tom童鞋的总成绩?
Ⅰ.问题分析:a.先筛选出Tom同学的所有课程成绩记录
b.然后计算所有Tom成绩总和
c.最后计算出平均成绩
Ⅱ.问题解决:
Ⅲ.代码解析:a.filter(func)负责筛选符合函数func的元素并返回一个新的数据集。(转换)
b.本例偷学了大佬(比我强的一律称为“大佬”)的写法,呸,(¬︿̫̿¬☆),文人的东西怎么能叫偷呢!!!!!!
(4)每门课程选修的同学人数?
Ⅰ.问题分析:a.先切分数据获得一个新的(课程)数据集
b.将新得到的数据集变成(K,V)形式。
c.最后计算每个课程的V的总和,即可得出每门课的学生人头数。
Ⅱ.问题解决:

Ⅲ.代码分析:a.首个map函数+split函数负责获得新数据集。(转换)
b.第二map函数负责将新数据集中元素变成(K,V)形式。(转换)
c.reduceByKey函数负责计算每门课的V的总和,(详细用法自己查)。(转换)
d.foreach(func),foreach函数负责将数据集中的每个元素传入func函数中执行,本例中为println()(输出)。(行动)
(5)每位同学的选修课程门数?
Ⅰ.问题分析:同上
Ⅱ.问题解决:

Ⅲ.代码分析:a.只需要更改split参数获得学生人头数据集即可。
(6)该系DataBase系共有多少人选修?
Ⅰ.问题分析:a.筛选出DataBase的所有数据。
b.计算学生人头数。
Ⅱ.问题解决:

Ⅲ.代码分析:a.代码中filter(……)筛选出DataBase词条并形成一个新的数据集。(转换)
b.count()函数计算学生总数。(行动)
(*^_^*)本人系菜鸟一枚,如有错误欢迎交流~~

浙公网安备 33010602011771号