Spark的算子练习题

Spark的算子练习题

读取文件的数据test.txt

一共有多少个小于20岁的人参加考试?
一共有多少个等于20岁的人参加考试?
一共有多少个大于20岁的人参加考试?
一共有多个男生参加考试?
一共有多少个女生参加考试?
12班有多少人参加考试?
13班有多少人参加考试?
语文科目的平均成绩是多少?
数学科目的平均成绩是多少?
英语科目的平均成绩是多少?
单个人平均成绩是多少?
12班平均成绩是多少?
12班男生平均总成绩是多少?
12班女生平均总成绩是多少?
13班平均成绩是多少?
13班男生平均总成绩是多少?
13班女生平均总成绩是多少?
全校语文成绩最高分是多少?
12班语文成绩最低分是多少?
13班数学最高成绩是多少?
总成绩大于150分的12班的女生有几个?
总成绩大于150分,且数学大于等于70,且年龄大于等于19岁的学生的平均成绩是多少?

数据如下👇

12 宋江 25 男 chinese 50
12 宋江 25 男 math 60
12 宋江 25 男 english 70
12 吴用 20 男 chinese 50
12 吴用 20 男 math 50
12 吴用 20 男 english 50
12 杨春 19 女 chinese 70
12 杨春 19 女 math 70
12 杨春 19 女 english 70
13 李逵 25 男 chinese 60
13 李逵 25 男 math 60
13 李逵 25 男 english 70
13 林冲 20 男 chinese 50
13 林冲 20 男 math 60
13 林冲 20 男 english 50
13 王英 19 女 chinese 70
13 王英 19 女 math 80
13 王英 19 女 english 70

参考答案如下👇

val sc = new SparkContext(new SparkConf().setMaster("local[*]").setAppName("test"))
1、读取文件的数据test.txt
val file = sc.textFile("test.txt")

2、一共有多少个小于20岁的人参加考试

println(file.groupBy { x => val datas = x.split(" "); datas(0) + "_" + datas(1) + "_" + datas(2) }.filter(_._1.split("_")(2).toInt < 20).count())

3、一共有多少个等于20岁的人参加考试

println(file.groupBy { x => val datas = x.split(" "); datas(0) + "_" + datas(1) + "_" + datas(2) }.filter(_._1.split("_")(2).toInt == 20).count())

4、一共有多少个大于20岁的人参加考试

println(file.groupBy { x => val datas = x.split(" "); datas(0) + "_" + datas(1) + "_" + datas(2) }.filter(_._1.split("_")(2).toInt > 20).count())

5、一共有多个男生参加考试

println(file.groupBy { x => val datas = x.split(" "); datas(0) + "_" + datas(1) + "_" + datas(3) }.filter(_._1.split("_")(2).equals("男")).count())

6、一共有多少个女生参加考试

println(file.groupBy { x => val datas = x.split(" "); datas(0) + "_" + datas(1) + "_" + datas(3) }.filter(_._1.split("_")(2).equals("女")).count())

7、12班有多少人参加考试

println(file.groupBy { x => val datas = x.split(" "); datas(0) + "_" + datas(1) }.filter(_._1.split("_")(0).equals("12")).count())

8、13班有多少人参加考试

println(file.groupBy { x => val datas = x.split(" "); datas(0) + "_" + datas(1) }.filter(_._1.split("_")(0).equals("13")).count())

9、语文科目的平均成绩是多少

println(file.filter(_.split(" ")(4).equals("chinese")).map(_.split(" ")(5).toFloat).mean())

10、数学科目的平均成绩是多少

println(file.filter(_.split(" ")(4).equals("math")).map(_.split(" ")(5).toFloat).mean())

11、英语科目的平均成绩是多少

println(file.filter(_.split(" ")(4).equals("english")).map(_.split(" ")(5).toFloat).mean())

12、单个人平均成绩是多少

println(file.map(x => {
  val line = x.split(" ");
  (line(0) + "_" + line(1), line(5).toInt)
}).map(x => (x._1, (x._2, 1))).reduceByKey((x, y) => (x._1 + y._1, x._2 + y._2)).map(x => (x._1, x._2._1 / x._2._2)).collect().mkString(","))

13、12班平均成绩是多少

println(file.filter(_.split(" ")(0).equals("12")).map(x => {
val line = x.split(" "); (line(0), line(5).toInt)
}).map(x => (x._1, (x._2, 1))).reduceByKey((x, y) => (x._1 + y._1, x._2 + y._2)).map(x => (x._1, x._2._1 / x._2._2)).map(_._2).collect().mkString(","))

14、12班男生平均总成绩是多少

println(file.filter { x => var datas = x.split(" "); datas(0).equals("12") && datas(3).equals("男") }.map(x => {val line = x.split(" "); (line(0), line(5).toInt)})
.map(x => (x._1, (x._2, 1))).reduceByKey((x, y) => (x._1 + y._1, x._2 + y._2)).map(x => (x._1, x._2._1 / x._2._2)).map(_._2).collect().mkString(","))

15、12班女生平均总成绩是多少?

println(file.filter { x => var datas = x.split(" "); datas(0).equals("12") && datas(3).equals("女") }.map(x => {val line = x.split(" "); (line(0), line(5).toInt)})
.map(x => (x._1, (x._2, 1))).reduceByKey((x, y) => (x._1 + y._1, x._2 + y._2)).map(x => (x._1, x._2._1 / x._2._2)).map(_._2).collect().mkString(","))

16、13班平均成绩是多少?

println(file.filter(_.split(" ")(0).equals("13")).map(x => {val line = x.split(" "); (line(0), line(5).toInt)
}).map(x => (x._1, (x._2, 1))).reduceByKey((x, y) => (x._1 + y._1, x._2 + y._2)).map(x => (x._1, x._2._1 / x._2._2)).map(_._2).collect().mkString(","))

17、13班男生平均总成绩是多少

println(file.filter { x => var datas = x.split(" "); datas(0).equals("13") && datas(3).equals("男") }.map(x => {val line = x.split(" "); (line(0), line(5).toInt)}).map(x => (x._1, (x._2, 1))).reduceByKey((x, y) => (x._1 + y._1, x._2 + y._2)).map(x => (x._1, x._2._1 / x._2._2)).map(_._2).collect().mkString(","))

18、13班女生平均总成绩是多少

println(file.filter { x => var datas = x.split(" "); datas(0).equals("13") && datas(3).equals("女") }.map(x => {val line = x.split(" "); (line(0), line(5).toInt)}).map(x => (x._1, (x._2, 1))).reduceByKey((x, y) => (x._1 + y._1, x._2 + y._2)).map(x => (x._1, x._2._1 / x._2._2)).map(_._2).collect().mkString(","))

19、全校语文成绩最高分是多少

println(file.filter {_.split(" ")(4).equals("chinese")}.map(_.split(" ")(5)).max())

20、12班语文成绩最低分是多少

println(file.filter { x => var datas = x.split(" "); datas(4).equals("chinese") && datas(0).equals("12") }.map(_.split(" ")(5)).min())

21、13班数学最高成绩是多少

println(file.filter { x => var datas = x.split(" "); datas(4).equals("math") && datas(0).equals("13") }.map(_.split(" ")(5)).max())

22、总成绩大于150分的12班的女生有几个

//方式一:无shuffle
println(file.filter { x => var datas = x.split(" "); datas(3).equals("女") && datas(0).equals("12") }.groupBy(_.split(" ")(1)).map {
  case (name, list) => {
     list.map(_.split(" ")(5).toFloat).sum
  }
}.filter(_ > 150).count())
//方式二:有shuffle
println(file.filter { x => var datas = x.split(" "); datas(3).equals("女") && datas(0).equals("12") }
.map { x => var datas = x.split(" "); (datas(1), datas(5).toInt) }
.reduceByKey(_ + _).filter(_._2 > 150).count())

23、总成绩大于150分,且数学大于等于70,且年龄大于等于19岁的学生的平均成绩是多少

val data1 = file.map(x => {val line = x.split(" "); (line(0) + "," + line(1) + "," + line(3), line(5).toInt)})
val data2 = file.map(x => {val line = x.split(" "); (line(0) + "," + line(1) + "," + line(3) + "," + line(4), line(5).toInt)})

//过滤出总分大于150的,并求出平均成绩

val com1: RDD[(String, Int)] = data1
.map(a => (a._1, (a._2, 1)))
.reduceByKey((a, b) => (a._1 + b._1, a._2 + b._2))
.filter(x => (x._2._1 > 150))
.map(t => (t._1, t._2._1 / t._2._2))

//过滤出 数学大于等于70,且年龄大于等于19岁的学生

val com2: RDD[(String, Int)] = data2
.filter(x => {val datas = x._1.split(","); datas(3).equals("math") && x._2 > 70})
.map(x => {val datas = x._1.split(","); (datas(0) + "," + datas(1) + "," + datas(2), x._2.toInt)})

println(com1.join(com2).map(x => (x._1, x._2._1)).collect().mkString(","))

sc.stop()
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值