注:玄学编程,在第二题时设置local[4]时莫名其妙在统计count时会出现某些age统计量变少,如22岁的少2个(正确:1137,统计出来为1135),设置为local时结果就不会出现某些age count数量减少!淦!玄学

题目:



(1) 分析2016年 ①②③④ 属性 z-score 排名

package zhimport org.apache.spark.sql.SparkSession/**** @author smallheroic* @Date 2019-12-12 15:18**/
object homework1 {case class nba(Age:Int,`FG%`:Double,`FT%`:Double,`3P13`:Double,TRB:Double,Player:String)//不使用 `FG%`则会报错val root="E:\\FTP\\spark\\4-sparkSQL\\basketball\\"val spark = SparkSession.builder().appName("homework1").master("local").getOrCreate()import spark.implicits._val nbaPerdata_1 = spark.read.format("com.databricks.spark.csv").option("header", "true").option("inferSchema", "true").load(root + "leagues_NBA_2016_per_game_per_game.csv").select("Player","Age","FG%","FT%","3P13","TRB")val nbas = nbaPerdata_1.as[nba] //抽取其中的"Player","Age","FG%","FT%","3P13","TRB"保存到datasetdef ans1_1()={ //FG%的z-score排名val `perAvgFG%`=nbas.groupBy("Player").avg("FG%").selectExpr("Player","`avg(FG%)` as perAvgFG").sort($"perAvgFG".desc_nulls_last,$"Player")//null值默认为最大,通过处理放到最后,若z-score相同则按照名字排序val avgFG =nbas.selectExpr("avg(`FG%`) as `avgFG%`").collect()(0).getDouble(0)//获取所有球员的FG%平均值val stdFG=nbas.selectExpr("std(`FG%`) as `stdFG%`").collect()(0).getDouble(0)//获取所有球员的FG%的标准差`perAvgFG%`.selectExpr("Player",s"(perAvgFG - ${avgFG})/${stdFG} as `FG_z-score`")//在perAvgFG排序过了}def ans1_2()={val `perAvgFT%`=nbas.groupBy("Player").avg("FT%").selectExpr("Player","`avg(FT%)` as perAvgFT").sort($"perAvgFT".desc_nulls_last,$"Player")val avgFT =nbas.selectExpr("avg(`FT%`) as `avgFT%`").collect()(0).getDouble(0)val stdFT=nbas.selectExpr("std(`FT%`) as `stdFT%`").collect()(0).getDouble(0)`perAvgFT%`.selectExpr("Player",s"(perAvgFT - ${avgFT})/${stdFT} as `FT_z-score`")//在perAvgFT排序过了}def ans1_3()={val `perAvg3P13`=nbas.groupBy("Player").avg("3P13").selectExpr("Player","`avg(3P13)` as perAvg3P13").sort($"perAvg3P13".desc_nulls_last,$"Player")val avg3P13 =nbas.selectExpr("avg(`3P13`) as `avg3P13`").collect()(0).getDouble(0)val std3P13=nbas.selectExpr("std(`3P13`) as `std3P13`").collect()(0).getDouble(0)`perAvg3P13`.selectExpr("Player",s"(perAvg3P13 - ${avg3P13})/${std3P13} as `3P_z-score`")//在perAvg3P13排序过了}def ans1_4()={val `perAvgTRB`=nbas.groupBy("Player").avg("TRB").selectExpr("Player","`avg(TRB)` as perAvgTRB").sort($"perAvgTRB".desc_nulls_last,$"Player")val avgTRB =nbas.selectExpr("avg(`TRB`) as `avgTRB`").collect()(0).getDouble(0)val stdTRB=nbas.selectExpr("std(`TRB`) as `stdTRB`").collect()(0).getDouble(0)`perAvgTRB`.selectExpr("Player",s"(perAvgTRB - ${avgTRB})/${stdTRB} as `TRB_z-score`")//在perAvgTRB排序过了}def main(args: Array[String]): Unit = {ans1_1().show(10)println("以上为FG%的z-score前10排名")ans1_2().show(10)println("以上为FT%的z-score前10排名")ans1_3().show(10)println("以上为3P的z-score前10排名")ans1_4().show(10)println("以上为TRB的z-score前10排名")}}

(2) 分析自1980年以来每个年龄段参赛的数目

package zhimport org.apache.hadoop.conf.Configuration
import org.apache.hadoop.fs.{FileSystem, Path}
import org.apache.spark.sql.{DataFrame, SparkSession}
import zh.homework1.{root, spark}/**** @author SmallHeroic* @Date 2019-12-16 10:44**/
object homework2 {val spark = SparkSession.builder().appName("homework2").master("local").getOrCreate()val sc = spark.sparkContextval root="E:\\FTP\\spark\\4-sparkSQL\\basketball\\"val TMP_PATH = "E:\\FTP\\spark\\4-sparkSQL\\tmp\\basketball\\"val fs = FileSystem.get(new Configuration())fs.delete(new Path(TMP_PATH), true)import spark.implicits._for (i <- 1980 to 2016) {println(i)val yearStats = sc.textFile(s"${root}leagues_NBA_$i*")yearStats.saveAsTextFile(s"${TMP_PATH}/BasketballStatsWithYear/$i/")}def main(args: Array[String]): Unit = {val ageCount = spark.read.format("com.databricks.spark.csv").option("header", "true").option("inferSchema", "true").load(s"${TMP_PATH}/BasketballStatsWithYear/*")//读取符合条件的所有文件.select("Age").groupBy("Age").count().sort($"Age".asc_nulls_last)//获取Age,count(Age)ageCount.show(10)println("以上为自1980年以来每个年龄段参赛的数目")//另一种实现/*  val DATA_PATH = "E:\\FTP\\spark\\4-sparkSQL\\basketball\\"var df:DataFrame = spark.read.format("com.databricks.spark.csv").option("header", "true") //第一行数据为列名.option("inferSchema", true.toString) //这是自动推断属性列的数据类型。.load(DATA_PATH + "leagues_NBA_1980_per_game_per_game.csv").na.drop(Seq("age"))for(i<- 1981 to 2016){var tmp=spark.read.format("com.databricks.spark.csv").option("header", "true") //第一行数据为列名.option("inferSchema", true.toString) //这是自动推断属性列的数据类型。.load(DATA_PATH + "leagues_NBA_"+i+"_per_game_per_game.csv").na.drop(Seq("age"))df=df.unionAll(tmp)}val result=df.select(df("age")).groupBy(df("age")).count().sort(df("age").asc).show(28)*/}}

sparkSQL练习,分析处理篮球运动员数据相关推荐

  1. 案例——中国篮球运动员的基本信息分析

    案例--中国篮球运动员的基本信息分析 分析目标 1.计算中国男篮.女篮运动员的平均身高与平均体重 2.分析中国篮球运动员的年龄分布 3.计算中国篮球运动员的体质指数 数据获取 先导入可能需要用到的包 ...

  2. 接口和抽象类练习:教练和运动员案例: (1)人员:乒乓球运动员和篮球运动员。乒乓球教练和篮球教练。 (2)为了出国交流,跟乒乓球相关的人员都需要学习英语。 请用所学知识分析,设计类和接口。

    接口和抽象类的练习 需求分析: 教练和运动员案例: (1)人员:乒乓球运动员和篮球运动员.乒乓球教练和篮球教练. (2)为了出国交流,跟乒乓球相关的人员都需要学习英语. 请用所学知识分析,设计类和接口 ...

  3. 2021年大数据Spark(二十六):SparkSQL数据处理分析

    目录 SparkSQL数据处理分析 基于DSL分析 基于SQL分析 第一步.注册为临时视图 第二步.编写SQL,执行分析 ​​​​​​​SparkSQL数据处理分析 在SparkSQL模块中,将结构化 ...

  4. 我们现在有乒乓球运动员和篮球运动员,乒乓球教练和篮球教练 为了出国交流,跟乒乓球相关的人员都要学习英语 请用所有知识分析: 这个案例中有哪些具体类,哪些抽象类,哪些接口,并用代码实现

    文章目录 分析 定义学英语接口 定义抽象人类 定义抽象教练类 定义抽象运动员类 定义具体类乒乓球运动员类 定义具体类篮球运动员类 定义具体类乒乓球教练类 定义具体类篮球教练类 定义测试类 运行结果 分 ...

  5. NBA篮球运动员大数据分析决策支持系统

    package com.dt.spark.sparksql import org.apache.hadoop.conf.Configuration import org.apache.hadoop.f ...

  6. fullcalendar 显示的时间间隔只有四十五分钟_【体能新视点】——女子篮球运动员比赛期间的心率、血乳酸浓度和时间运动分析...

    女子篮球运动员比赛期间的心率. 血乳酸浓度和时间-运动分析-摘要- 本研究的目的是检验女子篮球运动员在比赛规则改变后的生理需求和运动模式.在九场正式比赛中,对九名大学代表队队员进行了研究.每场比赛都被 ...

  7. android 运动目标检测_MindSpore应用案例:AI对篮球运动员目标的检测

    MindSpore作为一个端边云协同的开源的全场景AI框架,今年3月份开源以来,受到了业界的广泛关注和应用,欢迎大家参与开源贡献.模型众智合作.行业创新与应用.学术合作等,贡献您在云侧.端侧 (HiM ...

  8. MindSpore实践:对篮球运动员目标的检测

    本文分享自华为云社区<MindSpore大V博文系列:AI对篮球运动员目标的检测>,原文作者:李锐锋. MindSpore作为一个端边云协同的开源的全场景AI框架,今年3月份开源以来,受到 ...

  9. 基于深度学习的篮球战术数据自动采集技术研究——项目展示

    1 项目背景 篮球运动除了需要统计如2分投中.2分投篮.3分投中.3分投篮.扣篮.助攻.盖帽.抢断.失误.犯规和得分等技术信息,还需要统计战术信息.现在统计工作大多数是通过手工完成的,这样的统计方式存 ...

最新文章

  1. K8S的横向自动扩容的功能Horizontal Pod Autoscaling
  2. java 三维全景_3D开发-全景技术基础
  3. effective c++_【阅读笔记】Effective C++()
  4. CentOS 7.2修改网卡名称
  5. 2021 年 6 月程序员工资统计,反作弊算法工程师太可怕了。。
  6. Microsoft Azure 大计算 – 宣布收购 GreenButton
  7. java中生成pdf,插入图片,页眉、页脚、表格
  8. powerbi python词云图_Power BI 标签云可视化
  9. 流量治理神器-Sentinel限流熔断应用实战
  10. Chrome 中迅雷的插件(正确的下载地址)下载以及安装(一)
  11. c# - 美元符号是什么$
  12. 画出使用回溯法解0/1背包问题的解空间树
  13. 利用GSensor让屏幕实现360度旋转
  14. 数据结构:弗洛伊德算法(最短路径)图文详解
  15. python与机器学习
  16. Python3 遍历列表、字典和元组方式总结
  17. Android MediaPlayer源码分析
  18. 写html网页注册机,动态网页编辑器(含注册机)
  19. 基于maven, 你的第一个SpringBoot应用的HelloWorld程序(写的步骤)
  20. KusionStack GAIDC2023 活动回顾

热门文章

  1. iPhone手机屏幕破碎更换小计
  2. allegro之5种封装Symbol和3种PAD类型
  3. 【HTML 教程】HTML 语言简介
  4. 当游戏直播也要授权的背后:利益之争让各路人马杀红眼
  5. TX Text Control .NET Server for ASP.NET 31.X
  6. HTML5七夕情人节表白网页制作【新年倒计时白色雪花飘落】HTML+CSS+JavaScript CSS特效
  7. 微信小程序实现点击左右按钮切换时间与DatetimePicker 时间选择组件相结合
  8. Rime输入法引擎配置( 小狼毫输入法常用设置)
  9. 黄色手绘小学英语课件PPT
  10. logisim数据选择器_利用Logisim构建小型数字系统(运动码表)