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")

相关推荐
人工智能训练4 小时前
【极速部署】Ubuntu24.04+CUDA13.0 玩转 VLLM 0.15.0:预编译 Wheel 包 GPU 版安装全攻略
运维·前端·人工智能·python·ai编程·cuda·vllm
会跑的葫芦怪5 小时前
若依Vue 项目多子路径配置
前端·javascript·vue.js
兩尛5 小时前
c++知识点2
开发语言·c++
fengfuyao9855 小时前
海浪PM谱及波形的Matlab仿真实现
开发语言·matlab
xiaoye-duck5 小时前
C++ string 底层原理深度解析 + 模拟实现(下)——面试 / 开发都适用
开发语言·c++·stl
xiaoqi9226 小时前
React Native鸿蒙跨平台如何进行狗狗领养中心,实现基于唯一标识的事件透传方式是移动端列表开发的通用规范
javascript·react native·react.js·ecmascript·harmonyos
jin1233226 小时前
React Native鸿蒙跨平台剧本杀组队消息与快捷入口组件,包含消息列表展示、快捷入口管理、快捷操作触发和消息详情预览四大核心功能
javascript·react native·react.js·ecmascript·harmonyos
Hx_Ma166 小时前
SpringMVC框架提供的转发和重定向
java·开发语言·servlet
期待のcode7 小时前
原子操作类LongAdder
java·开发语言
烬头88218 小时前
React Native鸿蒙跨平台实现二维码联系人APP(QRCodeContactApp)
javascript·react native·react.js·ecmascript·harmonyos