feat:完成3个需求

需求1:查找电影评分个数超过5000,并且平均分较高的前十部电影名称及其对应的平均评分
需求2:查找每个电影类别及其对应的平均分
需求3:查找被评分次数最多的前十部电影
This commit is contained in:
2026-09-21 17:00:40 +08:00
parent c62592d253
commit 94ccc5c841
4 changed files with 200 additions and 13 deletions
@@ -0,0 +1,112 @@
package com.example.utils
import com.example.spark.{TopGenresByAverageRating, TopTenAvgRatings, MovieRatingCount}
import com.zaxxer.hikari.{HikariConfig, HikariDataSource}
import org.apache.commons.dbutils.QueryRunner
object JDBCUtil {
// ==================== HikariCP 配置 ====================
private val config = new HikariConfig()
private val user = "root"
private val password = "root123456"
private val url = "jdbc:mysql://192.168.48.10:3306/test"
config.setJdbcUrl(url)
config.setUsername(user)
config.setPassword(password)
config.setDriverClassName("com.mysql.cj.jdbc.Driver")
config.setMaximumPoolSize(10)
config.setMinimumIdle(5)
config.setIdleTimeout(30000)
config.setConnectionTimeout(30000)
config.setAutoCommit(true)
// 数据源
private val dataSource = new HikariDataSource(config)
// ==================== 获取 QueryRunner ====================
def getQueryRunner: Option[QueryRunner] =
try {
Some(new QueryRunner(dataSource))
} catch {
case e: Exception =>
e.printStackTrace()
None
}
// ==================== 写入 MySQL ====================
def insert2Mysql(res: Any): Unit =
getQueryRunner match {
case Some(queryRunner) =>
upsert(res, queryRunner)
case None =>
println("Mysql 连接失败")
System.exit(-1)
}
// ==================== 根据类型执行不同 SQL ====================
private def upsert(res: Any, queryRunner: QueryRunner): Unit = {
res match {
case data: TopTenAvgRatings =>
val sql =
"""
|REPLACE INTO top_ten_avg_ratings (
| movie_id,
| title,
| avg_rating
|) VALUES (?, ?, ?)
""".stripMargin
queryRunner.update(
sql,
data.movieId,
data.title,
data.avgRating
)
case data: TopGenresByAverageRating =>
val sql =
"""
|REPLACE INTO genres_average_rating (
| genres,
| avg_rating
|) VALUES (?, ?)
""".stripMargin
queryRunner.update(
sql,
data.genres,
data.avgRating
)
case data: MovieRatingCount =>
val sql =
"""
|REPLACE INTO movie_rating_count (
|movie_id,
|title,
|ratingCount
|) VALUES (?, ?, ?)
""".stripMargin
queryRunner.update(
sql,
Int.box(data.movieId),
data.title,
Long.box(data.ratingCount)
)
case _ =>
println(s"不支持的数据类型:${res.getClass.getName}")
}
}
}