spark mmlib写一个酒店推荐系统,并且给出代码
时间: 2023-06-13 07:08:20 浏览: 48
下面是一个简单的酒店推荐系统的代码示例,使用Spark MLlib中的协同过滤算法:
```scala
import org.apache.spark.ml.evaluation.RegressionEvaluator
import org.apache.spark.ml.recommendation.ALS
import org.apache.spark.sql.{DataFrame, Dataset, Row, SparkSession}
case class Rating(userId: Int, hotelId: Int, rating: Float, timestamp: Long)
object HotelRecommendationSystem {
def main(args: Array[String]): Unit = {
// 创建 SparkSession
val spark = SparkSession.builder()
.appName("HotelRecommendationSystem")
.getOrCreate()
// 读取数据
val ratings = readRatings(spark, "ratings.csv")
// 划分数据集
val Array(training, test) = ratings.randomSplit(Array(0.8, 0.2))
// 建立模型
val als = new ALS()
.setMaxIter(10)
.setRegParam(0.01)
.setUserCol("userId")
.setItemCol("hotelId")
.setRatingCol("rating")
val model = als.fit(training)
// 预测评分
val predictions = model.transform(test)
// 评估模型
val evaluator = new RegressionEvaluator()
.setMetricName("rmse")
.setLabelCol("rating")
.setPredictionCol("prediction")
val rmse = evaluator.evaluate(predictions)
println(s"Root-mean-square error = $rmse")
// 为每个用户推荐酒店
val userHotel = ratings.select("userId", "hotelId").distinct()
val recommendations = model.recommendForUserSubset(userHotel, 10)
recommendations.show()
// 停止 SparkSession
spark.stop()
}
def readRatings(spark: SparkSession, path: String): Dataset[Rating] = {
import spark.implicits._
spark.read.format("csv")
.option("header", true)
.load(path)
.selectExpr("cast(userId as int)", "cast(hotelId as int)", "cast(rating as float)", "cast(timestamp as long)")
.as[Rating]
}
}
```
该示例代码将数据集加载到DataFrame中,然后使用ALS算法建立推荐模型,并使用RMSE评估模型的准确性。最后,它为每个用户推荐10个酒店。请注意,这只是一个简单的示例,实际的推荐系统需要更复杂的算法和数据处理。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)