编写一个Scala代码示例,使用Spark RDD模式来分析MovieLens数据集,求最喜欢看电影(影评次数最多)的那位女性评最高分的 10 部电影的平均影评分(观影者,电影名,影评分)
时间: 2024-10-29 12:09:23 浏览: 29
在Scala中,我们可以使用Apache Spark库来处理大数据集,如MovieLens数据集。首先,我们需要导入必要的Spark和MLlib库,并加载数据。这里是一个简单的例子,假设我们已经有一个RDD `ratings` 存储了评分信息:
```scala
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.functions._
// 创建Spark配置和上下文
val conf = new SparkConf().setAppName("TopFemaleRatings")
val sc = new SparkContext(conf)
// 假设 ratingsRDD 是一个包含用户ID、电影ID、评分和性别等字段的DataFrame
// 通过mapPartitionsWithIndex函数获取每个分区的数据并进行处理
val topTenFemales = ratingsRDD
.filter(_._4 === "F") // 过滤出女性用户的评分
.withColumn("count", monotonically_increasing_id()) // 添加一个新的计数列
.groupBy($"userId", $"movieId") // 按照用户和电影ID分组
.agg(avg("rating").alias("avgRating"), count("*").alias("totalReviews")) // 计算平均评分和总评论数
.filter(_._2._2 > 1) // 只保留有足够评价次数的用户
.orderBy(desc("totalReviews"), desc("avgRating")) // 按降序排列
.limit(10) // 取前10位
// 现在topTenFemales是一个RDD,每条记录包含 (userId, movieId, avgRating)
val averageScores = topTenFemales.mapValues(_._1) // 提取平均评分
val result = averageScores.join(ratingsRDD) // 将平均评分与原始数据关联,找到对应的具体评分
result.take(10) // 输出结果:前10部女性最喜欢的高评分电影及其平均评分
```
阅读全文