Spark编程复习

复习题

这个是spark编程练习,有题目和答案,希望能帮助到大家。

1.文章数据,每个RDD元素一篇文章

数据准备:
var rdd=sc.makeRDD(Array(“I love big data”, “Hadoop is the basal platform”, “Spark is the sharp tool”))
问题:
(1)求所有文章总的WordCount
方法1:

方法2:
rdd.flatMap(x=>x.split(" “)).map(x=>(x,1)).reduceByKey((x,y)=>x+y).collect
(1)求所有文章总的WordCount,按每行一个词汇输出到控制台,每行格式为:词汇,次数
rdd.flatMap(x=>x.split(” “)).map(x=>(x,1)).reduceByKey((x,y)=>x+y).foreach(x=>println(x._1+”,"+x._2))

2.有若干整数

数据准备:
var rdd=sc.makeRDD(Array(1, 3, 4, 8))
问题:
(1)求最大值
方法1:
rdd.max
方法2:
rdd.reduce((x,y)=>if(x>y) x else y)
(2)输出所有奇数
rdd.filter(x=>x%2==1).collect

3.一只基金,2017~2022每年年化收益分别为:4%,2%,3.4%,4.2%,3.3%,2.4%

数据准备:
var rdd=sc.makeRDD(Array((2017,0.04),(2018,0.02),(2019,0.034),(2020,0.042),(2021,0.033),(2022,0.024)))
问题:
(1)如果2017年年初投资10000元,到2022年年末应该是多少钱?
方法1:
sc.makeRDD(Array(10000d)).union(rdd.map(x=>x._2+1)).reduce((x,y)=>xy)
方法2:
rdd.map(x=>x._2+1).reduce((x,y)=>x
y)10000
(2)如果2019年年初投资10000元,两年后应该是多少钱?
rdd.filter(x=>x._1>=2019 && x._1<=2019+2).map(x=>x._2+1).reduce((x,y)=>x
y)*10000

4.学生姓名和分数数据

数据准备:
var rdd=sc.makeRDD(Array((“Tom”, 80), (“Willy”, 78), (“Lily”, 89), (“John”, 86)))
问题:
(1)求第一名学生的姓名和分数
rdd.reduce((x,y)=>if(x._2>y._2) x else y)
(2)输出前3名学生的姓名和分数
rdd.sortBy(x=>x._2,false).take(3)
(3)统计各个分数段的学生
rdd.map(x=>((x._2/10).toInt,x._1)).groupByKey.collect

5.学生姓名、科目和分数数据

数据准备:
var rdd=sc.makeRDD(Array((“Tom”, “Math”, 80), (“Tom”, “Java”, 78), (“Lily”, “Math”, 89), (“Lily”, “Java”, 86)))
问题:
(1)统计各科目平均分
rdd.map(x=>(x._2,x._3)).groupByKey.map(x=>(x._1,x._2.sum/x._2.toArray.length)).collect
(2)求各科第一名的学生姓名、科目和分数
rdd.map(x=>(x._1,(x._2,x._3))).reduceByKey((x,y)=>if(x._2>y._2) x else y).collect

6.学生姓名和分数数据

数据准备:
var rdd=sc.makeRDD(Array((“Tom,80”), (“Willy,78”), (“Lily,89”), (“John,86”)))
问题:
(1)求总分
rdd.map(x=>x.split(“,”)).map(x=>x(1).toInt).sum
(2)求平均分
var sum=rdd.map(x=>x.split(“,”)).map(x=>(x(1).toInt,1)).reduce((x,y)=>(x._1+x._2,y._1+y._2))
print(sum._1/sum._2)

7.数据包含每个学生本学期三科的成绩(科目数固定)

数据准备:
var rdd=sc.makeRDD(Array((“Tom,80,90,78”), (“Willy,72,92,67”), (“Lily,57,80,72”), (“John,86,59,54”)))
问题:
(1)求每个学生的平均分并输出
rdd.map(x=>x.split(“,”)).map(x=>(x(0),(x(1).toInt+x(2).toInt+x(3).toInt)/3)).collect
(2)求每个学生的最高分并输出
rdd.map(x=>x.split(“,”)).map(x=>(x(0),Array(x(1).toInt,x(2).toInt,x(3).toInt).max)).collect
(3)输出有不及格科目的学生
rdd.map(x=>x.split(“,”)).map(x=>(x(0),Array(x(1).toInt,x(2).toInt,x(3).toInt).min)).filter(x=>x._2<60).map(x=>x._1).collect
(4)输出所有不及格学生的姓名及不及格分数
rdd.map(x=>x.split(“,”)).flatMap(x=>Array((x(0),x(1).toInt),(x(0),x(2).toInt),(x(0),x(3).toInt))).filter(x=>x._2<60).collect

8.数据包含每个学生本学期各科的成绩(科目数不固定)

数据准备:
var rdd=sc.makeRDD(Array((“Tom,80,90,78”), (“Willy,72”), (“Lily,67,80,72,61”), (“John,86,98,54,66,90”)))
问题:
(1)将学生的成绩取出到数组中
rdd.map(x=>x.split(“,”)).map(x=>(1 to x.length-1).map(i=>x(i).toInt)).collect
(2)求每个学生平均分,输出姓名和对应的平均分
方法1:
rdd.map(x=>x.split(“,”)).map(x=>(x(0),(1 to x.length-1).map(i=>x(i).toInt).sum/(x.length-1))).collect
方法2:
rdd.map(x=>x.split(“,”)).map(x=>(x(0),(1 to x.length-1).map(i=>x(i).toInt))).map(x=>(x._1,x._2.sum/x._2.length)).collect

9.数据包含每个学生本学期数学、英语和Java三科的成绩

数据准备:
var rdd=sc.makeRDD(Array((“Tom,80,90,78”), (“Willy,72,92,67”), (“Lily,57,80,72”), (“John,86,59,54”)))
问题:
(1)将数据转为DataFrame并显示缩略表格内容和表格结构
var df=rdd.map(x=>x.split(“,”)).map(x=>(x(0),x(1).toInt,x(2).toInt,x(3).toInt)).toDF(“Name”,“Math”,“English”,“Java”)
df.show
df.printSchema
(2)查询每人的数学成绩并显示缩略表格
方法1:
df.select(“math”).show
方法2:
df.createTempView(“Stu”)
df.sqlContext.sql(“select math from Stu”)
(3)查询每人的平均成绩并显示缩略表格
方法1:
df.select((col(“Math”)+col(“English”)+col(“Java”))/3 as “avg”).show
方法2:
df.createTempView(“Stu”)
df.sqlContext.sql(“select (Math+English+Java)/3 as avg from Stu”).show

10.数据包含每个城市每日的气温数据

数据准备:
var rdd=sc.makeRDD(Array((“Chengdu,30,2022-8-12”), (“Chengdu,32.2,2022-8-13”), (“Chengdu,30.3,2022-8-15”), (“Xian,34,2022-8-12”),(“Xian,31.5,2022-8-13”),(“Xian,30.6,2022-8-16”),(“Beijing,33.1,2022-8-12”),(“Beijing,32.8,2022-8-13”),(“Beijing,33.2,2022-8-14”)))
问题:
(1)将数据转为DataSet并缩略显示表格和表格结构
case class TempClass(City:String,Temp:Float,Date:java.sql.Date)
var timeFormat=new java.text.SimpleDateFormat(“yyyy-MM-dd”)
var ds=rdd.map(x=>x.split(“,”)).map(x=>TempClass(x(0),x(1).toFloat,new java.sql.Date(timeFormat.parse(x(2)).getTime))).toDS
ds.show
ds.printSchema
(2)将数据转为DataFrame并显示缩略表格内容和表格结构
var timeFormat=new java.text.SimpleDateFormat(“yyyy-MM-dd”)
var df=rdd.map(x=>x.split(“,”)).map(x=>(x(0),x(1).toFloat,new java.sql.Date(timeFormat.parse(x(2)).getTime))).toDF(“City”,“Temp”,“Date”)
df.show
df.printSchema
(3)查询每个城市平均气温,并显示缩略表格
方法1:
df.groupBy(“City”).mean(“Temp”).show
方法2:
df.createTempView(“CityTemp”)
df.sqlContext.sql(“select City, Mean(Temp) from CityTemp group by City”).show
(4)查询每日温度最高的城市和温度,并按日期升序排列,并显示缩略表格
df.createTempView(“CityTemp”)
df.sqlContext.sql(“select c1.City, c1.Temp, c1.Date from CityTemp c1 where c1.Temp=(select max(c2.Temp) from CityTemp c2 where c2.Date=c1.Date) order by c1.Date”).show
(5)查询每个城市出现最高气温的日期,并显示缩略表格
df.createTempView(“CityTemp”)
df.sqlContext.sql(“select c1.City, c1.Date from CityTemp c1 where c1.Temp=(select max(c2.Temp) from CityTemp c2 where c2.City=c1.City)”).show

你可能感兴趣的:(大数据平台,spark,大数据,java)