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()函数计算学生总数。(行动)

    

                                                  

                                                 (*^_^*)本人系菜鸟一枚,如有错误欢迎交流~~

  

 

posted @ 2021-04-24 14:16  唯见月寒日暖  阅读(921)  评论(0)    收藏  举报