第1关:NBA球员国籍分析
任务说明:打开右侧代码文件窗口,在 Begin 至 End 区域补充代码,读取 MySQL 中 work.nba_data
表的所有数据进行分析。统计出各个国家中 NBA 球员的数量,最终输出国籍字段 country
和 数量字段 count
(注意重命名),将结果存储到 MySQL 中的 result.nba_country
表(已创建)。
result.nba_country 表结构如下:
字段 | 类型 | 含义 |
---|---|---|
country | varchar(50) | 国籍 |
count | int(5) | 球员数量 |
MySQL 数据库连接信息
账号: root
密码:123123
地址:127.0.0.1
端口:3306
import org.apache.spark.sql.{DataFrame, SaveMode, SparkSession}
object First_Question {
def main(args: Array[String]): Unit = {
val spark: SparkSession = SparkSession
.builder()
.appName("First_Question")
.master("local[*]")
.getOrCreate()
/******************* NBA 球员国籍分析 *******************/
/******************* Begin *******************/
// 1. 读取数据
spark.read.format("jdbc")
.option("driver","com.mysql.jdbc.Driver")
.option("url","jdbc:mysql://127.0.0.1:3306/work")
.option("dbtable","nba_data")
.option("user","root")
.option("password","123123")
.load()
.createOrReplaceTempView("data")
// 2. 分析球员国籍分布
val df:DataFrame=spark.sql("""select country,count(*) count from data group by country""".stripMargin)
// 3.存储
df.repartition(1).write.format("jdbc")
.option("driver","com.mysql.jdbc.Driver")
.option("url","jdbc:mysql://127.0.0.1:3306/result")
.option("dbtable","nba_country")
.option("user","root")
.option("password","123123")
.mode(SaveMode.Overwrite)
.save()
/******************* End *******************/
spark.stop()
}
}
第2关:NBA球员得分分析
任务说明:打开右侧代码文件窗口,在 Begin 至 End 区域补充代码,读取 MySQL 中 work.nba_data
表的所有数据进行分析。统计出各个国家中,场均得分最高的 NBA 球员,只统计赛季为 Career
的数据。 最终输出球员姓名字段 player_name
、场均得分字段 PTS
、国籍字段 country
,将结果存储到 MySQL 中的 result.nba_pts
表(已创建)。
result.nba_pts 表结构如下:
字段 | 类型 | 含义 |
---|---|---|
player_name | varchar(50) | 球员id |
pts | double | 场均得分 |
country | varchar(20) | 国籍 |
MySQL 数据库连接信息
账号: root
密码:123123
地址:127.0.0.1
端口:3306
import org.apache.spark.sql.{DataFrame, SaveMode, SparkSession}
object First_Question {
def main(args: Array[String]): Unit = {
val spark: SparkSession = SparkSession
.builder()
.appName("First_Question")
.master("local[*]")
.getOrCreate()
/******************* NBA 球员得分分析 *******************/
/******************* Begin *******************/
// 1. 读取数据
spark.read
.format("jdbc")
.option("driver", "com.mysql.jdbc.Driver")
.option("url", "jdbc:mysql://127.0.0.1:3306/work")
.option("dbtable", "nba_data")
.option("user", "root")
.option("password", "123123")
.load()
.createOrReplaceTempView("data")
// 2. 分析各国 NBA 球员场均最高得分
val df: DataFrame =
spark.sql("""
select player_name,pts,country
from
(select player_name,pts,country,dense_rank() over(partition by country order by pts desc) rank
from
(select * from data where season = "Career")t1 )t2
where
rank = 1
""".stripMargin)
// 3.存储
df.repartition(1)
.write
.format("jdbc")
.option("driver", "com.mysql.jdbc.Driver")
.option("url", "jdbc:mysql://127.0.0.1:3306/result")
.option("dbtable", "nba_pts")
.option("user", "root")
.option("password", "123123")
.mode(SaveMode.Overwrite)
.save()
/******************* End *******************/
spark.stop()
}
}
第3关:NBA球员胜率分析
任务说明:打开右侧代码文件窗口,在 Begin 至 End 区域补充代码,读取 MySQL 中 work.nba_data
表的所有数据进行分析。统计出经验 work_year
在 10 年或以上的 NBA 球员胜率,只统计赛季为 Career
的数据。 最终输出球员姓名字段 player_name
、胜率字段 WS
、经验字段 work_year
,将结果存储到 MySQL 中的 result.nba_ws
表(已创建)。
result.nba_ws 表结构如下:
字段 | 类型 | 含义 |
---|---|---|
player_name | varchar(50) | 球员id |
ws | double | 场均得分 |
work_year | varchar(20) | 经验/工作年份 |
MySQL 数据库连接信息
账号: root
密码:123123
地址:127.0.0.1
端口:3306
import org.apache.spark.sql.{DataFrame, SaveMode, SparkSession}
object First_Question {
def main(args: Array[String]): Unit = {
val spark: SparkSession = SparkSession
.builder()
.appName("First_Question")
.master("local[*]")
.getOrCreate()
/******************* NBA 球员胜率分析 *******************/
/******************* Begin *******************/
// 1. 读取数据,创建临时视图表
spark.read
.format("jdbc")
.option("driver", "com.mysql.jdbc.Driver")
.option("url", "jdbc:mysql://localhost:3306/work")
.option("dbtable", "nba_data")
.option("user", "root")
.option("password", "123123")
.load()
.createOrReplaceTempView("data")
// 2. 分析经验在10年或以上的 NBA 球员胜率
val df: DataFrame =
spark.sql("select player_name,ws,work_year from data where regexp_extract(work_year,'([0-9]+)') >= 10")
// 3.存储
df.repartition(1)
.write
.format("jdbc")
.option("driver", "com.mysql.jdbc.Driver")
.option("url", "jdbc:mysql://localhost:3306/result")
.option("dbtable", "nba_ws")
.option("user", "root")
.option("password", "123123")
.mode(SaveMode.Overwrite)
.save()
/******************* End *******************/
spark.stop()
}
}
第4关:NBA球员球队分析
任务说明:打开右侧代码文件窗口,在 Begin 至 End 区域补充代码,读取 MySQL 中 work.nba_data
表的所有数据进行分析。根据最后效力球队,统计出综合实力前 50 的球队。 综合实力计算:每支球队内所有球员的效率值与胜率相加的平均值即为综合实力值(保留两位小数)。最终输出球队字段 last_team_name
(重命名为 team_name
) 、综合实力字段 cs
(注意重命名),将结果存储到 MySQL 中的 result.nba_cs
表(已创建)。
result.nba_cs 表结构如下:
字段 | 类型 | 含义 |
---|---|---|
team_name | varchar(50) | 球队名称 |
cs | double | 综合实力 |
MySQL 数据库连接信息
账号: root
密码:123123
地址:127.0.0.1
端口:3306
import org.apache.spark.sql.{DataFrame, SaveMode, SparkSession}
object First_Question {
def main(args: Array[String]): Unit = {
val spark: SparkSession = SparkSession
.builder()
.appName("First_Question")
.master("local[*]")
.getOrCreate()
/******************* NBA 球员球队分析 *******************/
/******************* Begin *******************/
// 1. 读取数据,创建临时视图表
spark.read
.format("jdbc")
.option("driver", "com.mysql.jdbc.Driver")
.option("url", "jdbc:mysql://localhost:3306/work")
.option("dbtable", "nba_data")
.option("user", "root")
.option("password", "123123")
.load()
.createOrReplaceTempView("data")
// 2. 分析综合实力
val df:DataFrame=spark.sql("""
select team_name,cs
from
(select team_name,cs,dense_rank() over(order by cs desc) rank
from
(select last_team_name team_name,cast( avg(per + ws) as decimal(10,2) ) cs from data group by
last_team_name)t1)t2
where
rank <= 50
""".stripMargin)
// 3.存储
df.repartition(1)
.write
.format("jdbc")
.option("driver", "com.mysql.jdbc.Driver")
.option("url", "jdbc:mysql://localhost:3306/result")
.option("dbtable", "nba_cs")
.option("user", "root")
.option("password", "123123")
.mode(SaveMode.Overwrite)
.save()
/******************* End *******************/
spark.stop()
}
}
第5关:NBA球员趋势分析
任务说明:打开右侧代码文件窗口,在 Begin 至 End 区域补充代码,读取 MySQL 中 work.nba_data
表的所有数据进行分析。根据首秀时间,统计出每年新加入 NBA 的球员数量,过滤掉异常值 9999-99-99
。 最终输出年份字段 year
(注意重命名)和数量字段 count
(注意重命名),将结果存储到 MySQL 中的 result.nba_year
表(已创建)。
result.nba_year 表结构如下:
字段 | 类型 | 含义 |
---|---|---|
year | int(5) | 年份 |
count | int(5) | 数量 |
MySQL 数据库连接信息
账号: root
密码:123123
地址:127.0.0.1
端口:3306
import org.apache.spark.sql.{DataFrame, SaveMode, SparkSession}
object First_Question {
def main(args: Array[String]): Unit = {
val spark: SparkSession = SparkSession
.builder()
.appName("First_Question")
.master("local[*]")
.getOrCreate()
/******************* NBA 球员趋势分析 *******************/
/******************* Begin *******************/
// 1. 读取数据,创建临时视图表
spark.read
.format("jdbc")
.option("driver", "com.mysql.jdbc.Driver")
.option("url", "jdbc:mysql://localhost:3306/work")
.option("dbtable", "nba_data")
.option("user", "root")
.option("password", "123123")
.load()
.createOrReplaceTempView("data")
// 2. 分析球员趋势
val df: DataFrame =
spark.sql(
"""
select year,count(*) count
from
(select regexp_extract(firstTime,"([0-9]{4})") year
from
data
where
regexp_extract(firstTime,"([0-9]{4})") != 9999)t1
group by year
""".stripMargin)
// 3.存储
df.repartition(1)
.write
.format("jdbc")
.option("driver", "com.mysql.jdbc.Driver")
.option("url", "jdbc:mysql://localhost:3306/result")
.option("dbtable", "nba_year")
.option("user", "root")
.option("password", "123123")
.mode(SaveMode.Overwrite)
.save()
/******************* End *******************/
spark.stop()
}
}