6. RDD综合练习:更丰富的操作

网盘下载sc.txt文件,通过RDD操作实现以下数据分析:

持久化 scm.cache()

总共有多少学生?map(), distinct(), count()

 开设了多少门课程?


每个学生选修了多少门课?map(), countByKey()

 每门课程有多少个学生选?map(), countByValue()

 多少个100分?


Tom选修了几门课?每门课多少分?filter(), map() RDD

 Tom选修了几门课?每门课多少分?map(),lookup()  list


Tom的成绩按分数大小排序。filter(), map(), sortBy()

 Tom的平均分。map(),lookup(),mean()


生成(姓名课程,分数)RDD,观察keys(),values()

每个分数+20平时分。
分别用mapValues(func)和 map(func)实现。
并查看不及格人数的变化。

变化前不及格人数

mapValues(func)

 

map(func)


  • 求每门课的选修人数及平均分
    • lookup(),np.mean()实现

 

 

 

reduceByKey()和collectAsMap()实现

 

 

 

combineByKey(),map(),round()实现,确到2位小数

比较几种方法的异同

lookup,reduceByKey,combineByKey这三个函数都是针对键值对操作,以课程为键,分数为值,根据不同课程对分数进行统计计算

执行lookup得到的结果是单一课程的全部分数,需要再次计算该课程平均分,再通过循环得到全部课程的平均分

执行reduceByKey得到各课程的总分,需要再计算各课程的选修人数,再通过循环得到各个课程平均分

combineByKey需要提供三个函数,第一个函数将(k,v)中的 v 映射为 (v,1)-->c;

第二个函数根据“键”将初始化的c与v合并(此时的v还是最开始的值),形成新的c;

第三个函数将不同分区相同key的c合并,得到最终结果。

执行combineByKey可以直接得到各个课程的选修人数及总分,可以通过map直接得到各个课程的平均分


 

多个考勤文件,签到日期汇总,出勤次数统计

键值对RDD的内连接与外连接

join(), leftOuterJoin(), rightOuterJoin(), fullOuterJoin()

 

 

posted @ 2022-04-06 15:38  林立文  阅读(144)  评论(0编辑  收藏  举报