spark基础练习

   日期:2020-08-07     浏览:92    评论:0    
核心提示:在名为sparkwork.txt中有如下内容:班级ID 姓名 年龄 性别 科目 成绩12 张三 25 男 chinese 5012 张三 25 男 math 6012 张三 25 男 english 7012 李四 20 男 chinese 5012 李四 20 男 math 5012 李四 20 男 english 5012 王芳 19 女 chinese 7012 王芳 19 女 math 7012 王芳 19 女 english 7013 张大三 25 男 chinese 60
#在名为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






#客户中的前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))
# 找出有没有同名的客户?
sc.textFile("file:///data/customers.csv").map(_.split(",")).map(x=>x(1)+x(2)).map((_,1)).reduceByKey(_+_).filter(_._2>1).collect
#统计客户中的地域分布
#1.读取csv文件
val df = spark.read.format("csv").option("header","false").option("delimiter",",").load("file:///data/customers.csv").toDF("id","fname","lname","email","password","street","city","state","zipcode")
#选取有效字段
val df2 = df.select("street","city","state")
#注册临时表
df2.registerTempTable("customers")
#进行sql查询
 df2.sqlContext.sql("select distinct state ,count(1) over(partition by state),city ,count(1) over(partition by city),street,count(1) over(partition by street)from customers").show

csv文件格式如下:

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服