feat:完成3个需求
需求1:查找电影评分个数超过5000,并且平均分较高的前十部电影名称及其对应的平均评分 需求2:查找每个电影类别及其对应的平均分 需求3:查找被评分次数最多的前十部电影
This commit is contained in:
@@ -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}")
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user