以下是一个简单的Spark项目,使用Scala编写,包括代码和数据。该项目的目的是计算一组电影评分数据集的平均评分,并输出评分最高的10部电影。
数据集包含三个文件:movies.csv,ratings.csv,tags.csv。movies.csv文件包含电影的ID、名称和类型;ratings.csv文件包含用户对电影的评分;tags.csv文件包含用户对电影的标签。
代码:
```scala
import org.apache.spark.sql.{DataFrame, SparkSession}
import org.apache.spark.sql.functions.{avg, desc}
object MovieRatings {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder.appName("MovieRatings").getOrCreate()
//读取数据
val movies = readData(spark, "movies.csv")
val ratings = readData(spark, "ratings.csv")
//计算平均评分
val movieRatings = ratings.groupBy("movieId")
.agg(avg("rating").as("avg_rating"))
//将电影名称和平均评分连接起来
val movieAvgRatings = movies.join(movieRatings, Seq("movieId"))
//按照平均评分排序,并选出前10部电影
val topMovies = movieAvgRatings.orderBy(desc("avg_rating")).limit(10)
//输出结果
topMovies.show()
spark.stop()
}
def readData(spark: SparkSession, path: String): DataFrame = {
spark.read
.option("header", true)
.option("inferSchema", true)
.csv(path)
}
}
```
数据:
movies.csv
```
movieId,title,genres
1,Toy Story (1995),Adventure|Animation|Children|Comedy|Fantasy
2,Jumanji (1995),Adventure|Children|Fantasy
3,Grumpier Old Men (1995),Comedy|Romance
4,Waiting to Exhale (1995),Comedy|Drama|Romance
5,Father of the Bride Part II (1995),Comedy
```
ratings.csv
```
userId,movieId,rating,timestamp
1,2,3.5,1112486027
1,29,3.5,1112484676
2,2,3.0,835355493
2,62,3.0,835355749
3,2,4.0,1298862370
3,62,3.0,1298922049
```
tags.csv
```
userId,movieId,tag,timestamp
15,339,sandra 'boring' bullock,1138537770
15,1955,dentist,1193435061
```
注意:这里的代码和数据只是一个简单的示例,实际项目中需要根据具体需求进行修改和扩展。另外,数据应该存放在分布式文件系统(如HDFS)中,而不是本地文件系统。