需求1:查找电影评分个数超过5000,并且平均分较高的前十部电影名称及其对应的平均评分 需求2:查找每个电影类别及其对应的平均分 需求3:查找被评分次数最多的前十部电影
112 lines
2.7 KiB
Scala
112 lines
2.7 KiB
Scala
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}")
|
|
}
|
|
}
|
|
} |