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

相关推荐
橙子家2 小时前
浏览器缓存之【身份与会话管理】:Cookies 和 Private state tokens
前端
To_OC2 小时前
LC 49 字母异位词分组:想到哈希表很简单,选对 key 才是精髓
javascript·算法·leetcode
最新资讯动态3 小时前
HDC 2026 | 对话鲸鸿动能:存量时代,品牌如何夺回营销“主动权”?
前端
最新资讯动态3 小时前
游戏出海,从产品走向体系
前端
最新资讯动态3 小时前
20人团队跑出百万DAU、大厂也来抢量:谁在鸿蒙生态跑出加速度
前端
最新资讯动态3 小时前
千万开发者背后,鸿蒙商业化的B面
前端
爱勇宝5 小时前
AI 时代:智商决定起点,情商决定走多远
前端·ai编程
kyriewen5 小时前
用了半年 Claude Code 后,我尝试关掉它写了一周代码——结果比想象中严重
前端·javascript·ai编程
IT_陈寒6 小时前
Vite的静态资源打包让我熬夜到三点,这坑千万别跳
前端·人工智能·后端
山河木马7 小时前
矩阵专题0-webGL中的矩阵
javascript·webgl·计算机图形学