Spark-小练试刀

任务1:HDFS上有三份文件,分别为student.txt(学生信息表)result_bigdata.txt(大数据基础成绩表), result_math.txt(数学成绩表)。

加载student.txt为名称为student的RDDx数据,result_bigdata.txt为名称为bigdata的RDD数据,result_math.txt 为名称为math的RDD数据。

hdfs dfs -mkdir /user

hdfs dfs -mkdir /user/root

hdfs dfs -put /data/result_math.txt /user/root/

hdfs dfs -put /data/result_bigdata.txt /user/root/

hdfs dfs -put /data/student.txt /user/root/

val student= sc.textFile("/user/root/student.txt")

val bigdata = sc.textFile("/user/root/result_bigdata.txt")

val math= sc.textFile("/user/root/result_math.txt")

任务2:根据任务1得到的RDD bigdata及math,取出成绩排名前5的学生成绩信息。

val bigdata_map=bigdata.map(x=>x.split("\t")).map(x=>(x(0),x(1),x(2).toInt))

val bigdata_sort=bigdata_map.sortBy(x=>x._3,false)

bigdata_sort.take(5)

val math_map=math.map(x=>x.split("\t")).map(x=>(x(0),x(1),x(2).toInt))

val math_sort=math_map.sortBy(x=>x._3,false)

math_sort.take(5)

任务3:

  1. 找出考试成绩得过100分的学生ID,最终的结果需要集合到一个RDD中。

val math_100= math.map(x=>x.split("\t")).map(x=>(x(0),x(2).toInt)).filter(x=>x._2==100)

math_100.collect

val bigdata_100= bigdata.map(x=>x.split("\t")).map(x=>(x(0),x(2).toInt)).filter(x=>x._2==100)

bigdata_100.collect

math_100.union(bigdata_100).distinct.collect()

2.找出两门成绩都得100分的学生ID,结果汇总为一个RDD。

math_100.intersection(bigdata_100).collect()

任务4:

  1. 输出每位学生的总成绩,要求将两个成绩表中学生ID相同的成绩相加。

val math_kv= math.map(x=>x.split("\t")).map(x=>(x(0),x(2).toInt))

val bigdata_kv=math.map(x=>x.split("\t")).map(x=>(x(0),x(2).toInt))

val scores_kv=bigdata_kv.union(math_kv)

scores_kv.collect()

val allscore=scores_kv.reduceByKey((x,y)=>x+y)

allscore.collect()

2.输出每位学生的平均成绩,要求将两个成绩表中学生ID相同的成绩相加并计算出平均分。

val scores_kv_count=scores_kv.mapValues(x=>(x,1))

scores_kv_count.collect()

Val avgscore_count= scores_kv_count.reduceByKey((x,y)=>(x._1+y._1,x._2+y._2))

avgscore_count.collect()

val avgscore=avgscore_count.mapValues(x=>x._1/x._2)

avgscore.collect()

3.合并每个学生的总成绩和平均成绩。

val Total_score=allscore.join(avgscore)

Total_score.collect()

任务5:汇总学生成绩并以文本格式存储在HDFS上,数据汇总为学生ID,姓名,总分,平均分。

val studentInfo = m_student.join(avgscore).join(allscore)

studentInfo.saveAsTextFile("/user/root/total score")

相关推荐
郑文博Coding3 分钟前
Qt QWebEngine应用和网页的交互
开发语言·qt·交互
wuhen_n5 分钟前
Canvas特效实例:黑客帝国-字母矩阵(字母雨)
前端·javascript·矩阵·html5·canvas·canva可画
ʚʕ̯•͡˔•̯᷅ʔɞ LeeKuma7 分钟前
SSR vs SSG:前端渲染模式终极对决(附 Next.js/Nuxt.js 实战案例)
开发语言·前端·javascript
江沉晚呤时17 分钟前
使用 NServiceBus 在 .NET 中构建分布式系统
java·服务器·开发语言·mysql·.net
好蛋编程24 分钟前
【c语言】字符函数和字符串函数
c语言·开发语言
前后端杂货铺35 分钟前
uniapp+vue3+ts 使用canvas实现安卓端、ios端及微信小程序端二维码生成及下载
android·前端·ios·微信小程序·uni-app·canavas·二维码海报生成
Envyᥫᩣ36 分钟前
C#中的LINQ:简化数据查询与操作
开发语言·c#·linq
玄晓乌屋2 小时前
nvm for windows 安装低版本 node 丢失 npm 安装
前端·npm·node.js
SparklingTheo2 小时前
npm init、换源问题踩坑
前端·npm·node.js
el psy congroo2 小时前
Kotlin-高阶函数,Lambda表达式,内联函数
开发语言·kotlin