Spark 练习题
作者:mm
- 2023-02-21 北京
本文字数:2919 字
阅读完需:约 10 分钟
作业要求
现在有一批数据如下:
班级 姓名 年龄 性别 科目 成绩
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
使用spark的程序完成以下统计要求:
题目如下:
1. 读取文件的数据test.txt
2. 一共有多少个小于20岁的人参加考试?
3. 一共有多少个等于20岁的人参加考试?
4. 一共有多少个大于20岁的人参加考试?
5. 一共有多个男生参加考试?
6. 一共有多少个女生参加考试?
7. 12班有多少人参加考试?
8. 13班有多少人参加考试?
9. 语文科目的平均成绩是多少?
10. 数学科目的平均成绩是多少?
11. 英语科目的平均成绩是多少?
12. 每个人平均成绩是多少?
13. 12班平均成绩是多少?
14. 12班男生平均总成绩是多少?
15. 12班女生平均总成绩是多少?
16. 13班平均成绩是多少?
17. 13班男生平均总成绩是多少?
18. 13班女生平均总成绩是多少?
19. 全校语文成绩最高分是多少?
20. 12班语文成绩最低分是多少?
21. 13班数学最高成绩是多少?
22. 总成绩大于150分的12班的女生有几个?
23. 总成绩大于150分,且数学大于等于70,且年龄大于等于19岁的学生的平均成绩是多少?
复制代码
解答:
建 maven 项目
准备数据文件 text.txt,放入测试数据保存
创建 scala class-->object, 代码如下
package cn.spark.sparksql
//定义一个样例类
//case class StudentScore(class: String, name: String, age: Int, gender: String, subject: String,Score: Int )
object SparkSQLHW {
def main(args: Array[String]): Unit = {
val sparkConf: SparkConf = new SparkConf().setMaster("local[2]").setAppName("sparkDSL")
val spark: SparkSession = SparkSession.builder().config(sparkConf).getOrCreate()
val sc: SparkContext = spark.sparkContext
sc.setLogLevel("WARN")
//加载数据
// 1. 读取文件的数据test.txt
val rdd1 = sc.textFile("file:///C:\\MyCode\\bigdata_code_operate\\spark_code\\src\\main\\resources\\test.txt").map(x => x.split(" "))
//把rdd与样例类进行关联
//班级 姓名 年龄 性别 科目 成绩
val studentScoreRDD = rdd1.map(x => StudentScore(x(0), x(1), x(2).toInt,x(3),x(4),x(5).toInt))
//把rdd转换成DataFrame // 隐式转换
val studentScoreDF = studentScoreRDD.toDF
//打印schema信息
studentScoreDF.printSchema
//展示数据
studentScoreDF.show
//DataFrame注册成表
studentScoreDF.createTempView("studentScore")
//使用SparkSession调用sql方法统计查询
//2. 一共有多少个小于20岁的人参加考试?
spark.sql("select count(*) from studentScore where age < 20").show
//3. 一共有多少个等于20岁的人参加考试?
spark.sql("select count(*) from studentScore where age = 20").show
//4. 一共有多少个大于20岁的人参加考试?
spark.sql("select count(*) from studentScore where age > 20").show
//5. 一共有多个男生参加考试?
spark.sql("select count(*) from studentScore where gender = '男' ").show
//6. 一共有多少个女生参加考试?
spark.sql("select count(*) from studentScore where gender = '女' ").show
//7. 12班有多少人参加考试?
spark.sql("select count(*) from studentScore where class = '12' ").show
//8. 13班有多少人参加考试?
spark.sql("select count(*) from studentScore where class = '13' ").show
//9. 语文科目的平均成绩是多少?
spark.sql("select avg(score) as chineseAvgScore from studentScore where subject = 'chinese' ").show
//10. 数学科目的平均成绩是多少?
spark.sql("select avg(score) as chineseAvgScore from studentScore where subject = 'math' ").show
//11. 英语科目的平均成绩是多少?
spark.sql("select avg(score) as chineseAvgScore from studentScore where subject = 'english' ").show
//12. 每个人平均成绩是多少?
spark.sql("select avg(sum(score)) as personAvgScore from studentScore group by name").show
//13. 12班平均成绩是多少?
spark.sql("select avg(score) as class12AvgScore from studentScore where class = '12'").show
//14. 12班男生平均总成绩是多少?
spark.sql("select avg(sum(score)) as class12BoyAvgScore from studentScore where class = '12' and gender ='男' group by name").show
//15. 12班女生平均总成绩是多少?
spark.sql("select avg(sum(score)) as class12BoyAvgScore from studentScore where class = '12' and gender ='女' group by name").show
//16. 13班平均成绩是多少?
spark.sql("select avg(score) as class12AvgScore from studentScore where class = '13'").show
//17. 13班男生平均总成绩是多少?
spark.sql("select avg(sum(score)) as class12BoyAvgScore from studentScore where class = '13' and gender ='男' group by name").show
//18. 13班女生平均总成绩是多少?
spark.sql("select avg(sum(score)) as class12BoyAvgScore from studentScore where class = '13' and gender ='女' group by name").show
//19. 全校语文成绩最高分是多少?
spark.sql("select max(score) as maxChineseScore from studentScore where subject = 'chinese' ").show
//20. 12班语文成绩最低分是多少?
spark.sql("select min(score) as minChineseScore from studentScore where class = '12' and subject = 'chinese' ").show
//21. 13班数学最高成绩是多少?
spark.sql("select max(score) as maxMathScore from studentScore where class = '13' and subject = 'math' ").show
//22. 总成绩大于150分的12班的女生有几个?
spark.sql("select count(name) as countOfGirlInClass12ScoreGt150 from studentScore where class = '13' and gender ='女' group by name having sum(score)>150 ").show
//23. 总成绩大于150分,且数学大于等于70,且年龄大于等于19岁的学生的平均成绩是多少?
spark.sql("select avg(score) as avgScoreMathGtEq70Age19ScoreGt150 from studentScore where age >19 and name in (select name from studentScore where subject ='math' and score >70) group by name having sum(score)>150 ").show
spark.stop()
}
}
复制代码
划线
评论
复制
发布于: 刚刚阅读数: 1
mm
关注
还未添加个人签名 2018-08-21 加入
还未添加个人简介
评论