spark基础练习

#在名为sparkwork.txt中有如下内容:

班级ID 姓名 年龄 性别 科目 成绩
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

hdfs dfs -put sparkwork.txt /data/


#1. 一共有多少人参加考试?
scala> sc.textFile("/data/sparkwork.txt").collect.drop(1).map(_.split("\\s+")).groupBy(x=>x(1)).size
res6: Int = 6

#1.1 一共有多少个小于 20 岁的人参加考试?
scala> sc.textFile("/data/sparkwork.txt").collect.drop(1).map(_.split("\\s+")).filter(x=>x(2).toInt<20).groupBy(x=>x(1)).size
res10: Int = 2

#1.2 一共有多少个等于 20 岁的人参加考试?
scala> sc.textFile("/data/sparkwork.txt").collect.drop(1).map(_.split("\\s+")).filter(x=>x(2).toInt==20).groupBy(x=>x(1)).size
res11: Int = 2

#1.3 一共有多少个大于 20 岁的人参加考试?
scala> sc.textFile("/data/sparkwork.txt").collect.drop(1).map(_.split("\\s+")).filter(x=>x(2).toInt>20).groupBy(x=>x(1)).size
res12: Int = 2

#2. 一共有多个男生参加考试?
scala> sc.textFile("/data/sparkwork.txt").collect.drop(1).map(_.split("\\s+")).filter(x=>x(3)=="男").groupBy(x=>x(1)).size
res15: Int = 4

#2.1 一共有多少个女生参加考试?
scala> sc.textFile("/data/sparkwork.txt").collect.drop(1).map(_.split("\\s+")).filter(x=>x(3)=="女").groupBy(x=>x(1)).size
res16: Int = 2

#3. 12 班有多少人参加考试?
scala> sc.textFile("/data/sparkwork.txt").collect.drop(1).map(_.split("\\s+")).filter(x=>x(0)=="12").groupBy(x=>x(1)).size
res19: Int = 3

#3.1 13 班有多少人参加考试?
scala> sc.textFile("/data/sparkwork.txt").collect.drop(1).map(_.split("\\s+")).filter(x=>x(0)=="13").groupBy(x=>x(1)).size
res20: Int = 3

#4. 语文科目的平均成绩是多少?
scala> val x = sc.textFile("/data/sparkwork.txt").collect.drop(1).map(_.split("\\s+")).filter(x=>x(4)=="chinese").map(x=>x(5).toInt)
x: Array[Int] = Array(50, 50, 70, 60, 50, 70)
scala> x.sum/x.size
res54: Int = 58

#4.1 数学科目的平均成绩是多少?
scala> val x = sc.textFile("/data/sparkwork.txt").collect.drop(1).map(_.split("\\s+")).filter(x=>x(4)=="math").map(x=>x(5).toInt)
x: Array[Int] = Array(60, 50, 70, 60, 60, 80)
scala> x.sum/x.size
res55: Int = 63

#4.2 英语科目的平均成绩是多少?
scala> val x = sc.textFile("/data/sparkwork.txt").collect.drop(1).map(_.split("\\s+")).filter(x=>x(4)=="english").map(x=>x(5).toInt)
x: Array[Int] = Array(70, 50, 70, 70, 50, 70)
scala> x.sum/x.size
res56: Int = 63

#5. 单个人平均成绩是多少?
scala> sc.textFile("/data/sparkwork.txt").collect.drop(1).map(_.split("\\s+")).map(x=>(x(1),x(5))).groupBy(_._1).map(x=>(x._1,x._2.map(x=>x._2.toInt).sum/x._2.size))
res20: scala.collection.immutable.Map[String,Int] = Map(李大四 -> 53, 王芳 -> 70, 张大三 -> 63, 李四 -> 50, 王小芳 -> 73, 张三 -> 60)

#6. 12 班平均成绩是多少?
#求出总成绩/人数
scala> val x = sc.textFile("/data/sparkwork.txt").collect.drop(1).map(_.split("\\s+")).filter(x=>x(0)=="12").groupBy(x=>x(1))
x: scala.collection.immutable.Map[String,Array[Array[String]]] = Map(张三 -> Array(Array(12, 张三, 25,, chinese, 50), Array(12, 张三, 25,, math, 60), Array(12, 张三, 25,, english, 70)), 王芳 -> Array(Array(12, 王芳, 19,, chinese, 70), Array(12, 王芳, 19,, math, 70), Array(12, 王芳, 19,, english, 70)), 李四 -> Array(Array(12, 李四, 20,, chinese, 50), Array(12, 李四, 20,, math, 50), Array(12, 李四, 20,, english, 50)))

scala> x.flatMap(x=>(x._2.map(x=>x(5).toInt))).sum/x.size
res29: Int = 180


#6.1 12 班男生平均总成绩是多少?
#求出男生总成绩/男生人数
scala> val x = sc.textFile("/data/sparkwork.txt").collect.drop(1).map(_.split("\\s+")).filter(x=>x(0)=="12" && x(3)=="男").groupBy(x=>x(1))
x: scala.collection.immutable.Map[String,Array[Array[String]]] = Map(张三 -> Array(Array(12, 张三, 25,, chinese, 50), Array(12, 张三, 25,, math, 60), Array(12, 张三, 25,, english, 70)), 李四 -> Array(Array(12, 李四, 20,, chinese, 50), Array(12, 李四, 20,, math, 50), Array(12, 李四, 20,, english, 50)))

scala> x.flatMap(x=>(x._2.map(x=>x(5).toInt))).sum/x.size
res30: Int = 165



#6.2 12 班女生平均总成绩是多少?
#求出女生总成绩/女生人数
scala> val x = sc.textFile("/data/sparkwork.txt").collect.drop(1).map(_.split("\\s+")).filter(x=>x(0)=="12" && x(3)=="女").groupBy(x=>x(1))
x: scala.collection.immutable.Map[String,Array[Array[String]]] = Map(王芳 -> Array(Array(12, 王芳, 19,, chinese, 70), Array(12, 王芳, 19,, math, 70), Array(12, 王芳, 19,, english, 70)))

scala> x.flatMap(x=>(x._2.map(x=>x(5).toInt))).sum/x.size
res31: Int = 210



#7. 全校语文成绩最高分是多少?
scala> sc.textFile("/data/sparkwork.txt").collect.drop(1).map(_.split("\\s+")).filter(x=>x(4)=="chinese").map(x=>x(5).toInt).max
res32: Int = 70


#7.1 12 班语文成绩最低分是多少?
scala> sc.textFile("/data/sparkwork.txt").collect.drop(1).map(_.split("\\s+")).filter(x=>x(4)=="chinese" && x(0)=="12").map(x=>x(5).toInt).min
res33: Int = 50


#7.2 13 班数学最高成绩是多少?
scala> sc.textFile("/data/sparkwork.txt").collect.drop(1).map(_.split("\\s+")).filter(x=>x(4)=="math" && x(0)=="13").map(x=>x(5).toInt).max
res34: Int = 80

#8. 总成绩大于 150 分的 12 班的女生有几个?
scala> sc.textFile("/data/sparkwork.txt").collect.drop(1).map(_.split("\\s+")).filter(x=>x(3)=="女" && x(0)=="12").map(x=>(x(1),x(5))).groupBy(_._1).filter(x=>x._2.map(x=>x._2.toInt).sum>150).size
res40: Int = 1



/*
现有客户信息文件customers.csv,请找出:
客户中的前5个最大家族
客户中的前10个最流行的名字
*/


#客户中的前5个最大家族
scala> sc.textFile("/data/customers.csv").map(_.split(",")).collect.map(x=>(x(1),x(2))).groupBy(_._2).map(x=>(x._1,x._2.size)).toList.sortBy(-_._2).take(5)
res34: List[(String, Int)] = List(("Smith",4626), ("Johnson",76), ("Williams",69), ("Jones",65), ("Brown",62))


#客户中的前10个最流行的名字
scala> sc.textFile("/data/customers.csv").map(_.split(",")).collect.map(x=>(x(1),x(2))).groupBy(_._1).map(x=>(x._1,x._2.size)).toList.sortBy(-_._2).take(10)
res35: List[(String, Int)] = List(("Mary",4741), ("James",135), ("John",118), ("Robert",117), ("David",114), ("Michael",111), ("William",98), ("Richard",76), ("Joseph",72), ("Elizabeth",71))

csv文件格式如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/sun_0128/article/details/107802457