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

集合运算练习

union(), intersection(),subtract(), cartesian()

 

三、学生课程分数

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

持久化 scm.cache()

lines=sc.textFile("hdfs://localhost:9000/user/czb/sc.txt")
scm=lines.map(lambda line:line.split(',')).map(lambda line:[line[0],line[1],int(line[2])])

scm.cache()

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

scm.take(4)
scm.count()
scm.map(lambda line:line[0]).distinct().count()
scm.map(lambda line:line[0]).distinct().take(4)

开设了多少门课程?

scm.map(lambda line:line[1]).take(10)
scm.map(lambda line:line[1]).distinct().take(10)
scm.map(lambda line:line[1]).distinct().count()

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

name=scm.map(lambda line:(line[0],(line[1],line[2])))
name.take(4)
name.keys().take(6)
name.values().take(6)
name.countByKey()

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

name.values().countByKey()

多少个100分?

name.values().values().countByValue()[100]

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

scm.filter(lambda line:line[0]=='Tom').map(lambda line:line[1]).collect()
scm.filter(lambda line:line[0]=='Tom').map(lambda line:line[2]).collect()

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

name.lookup('Tom')
scm.filter(lambda line:line[0]=='Tom')

scm.filter(lambda line:line[0]=='Tom').map(lambda line:line[1]).collect()
scm.filter(lambda line:line[0]=='Tom').map(lambda line:line[2]).collect()

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

name.filter(lambda line:line[0]=='Tom').values().collect()

name.filter(lambda line:line[0]=='Tom').values().sortBy(lambda a:a[1],False).collect()

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

np.mean(scm.filter(lambda line:line[0]=='Tom').map(lambda line:line[2]).collect())

 

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

cr=lines.map(lambda line:line.split(',')).map(lambda line:(line[1],line[2]))
cr.take(3)

每个分数+20平均分。

分别用mapValues(func)和 map(func)实现。

并查看不及格人数的变化。

 

 

求每门课的选修人数及平均分

lookup(),np.mean()实现

 

 

reduceByKey()和collectAsMap()实现

 

 

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

 

posted @ 2022-04-06 11:22  灵精仔  阅读(79)  评论(0)    收藏  举报