请利用https://www.kaggle.com/datasets/whenamancodes/popular movies-datasets-58000-movies?resource=download 中包含文件:genome-tags.csv, links.csv, movies.csv, ratings.csv and tags.csv的数据,要求编程统计出不同体裁、年份的电影的数量,分析不同年代的哪种体裁的电影最多。可采用的组件有 MapReduce、HBase、 Hive、Spark core 和 Spark SQL 等;(HiveQL 与基于 Hive 的 Spark SQL 不能同时使用) 3、 相关数据文件必须上传到 HDFS 分布式文件系统上存储,数据处理分析结果需要打 印输出到屏幕上并且导出文件保存到 HDFS 上;(输出结果包含非常多条记录时,请只打印 前 10 条,但是导出到文件的记录须是完整的)
时间: 2024-04-02 14:34:19 浏览: 66
好的,我会根据您的要求进行编程统计。
首先,我们需要将数据文件上传到 HDFS 分布式文件系统上存储。假设我们已经将数据文件上传到了 HDFS 的 `/input` 目录下,接下来我们可以使用 Spark SQL 来分析数据。
以下是代码实现:
```python
from pyspark.sql import SparkSession
# 创建 SparkSession
spark = SparkSession.builder \
.appName("PopularMoviesAnalysis") \
.getOrCreate()
# 读取数据文件
movies_df = spark.read.csv("hdfs://localhost:9000/input/movies.csv", header=True)
ratings_df = spark.read.csv("hdfs://localhost:9000/input/ratings.csv", header=True)
tags_df = spark.read.csv("hdfs://localhost:9000/input/tags.csv", header=True)
# 注册为临时表
movies_df.createOrReplaceTempView("movies")
ratings_df.createOrReplaceTempView("ratings")
tags_df.createOrReplaceTempView("tags")
# 统计不同体裁、年份的电影数量
genre_count_df = spark.sql("""
SELECT genres, SUBSTR(release_date, 1, 4) AS year, COUNT(*) AS count
FROM movies
GROUP BY genres, SUBSTR(release_date, 1, 4)
ORDER BY year, count DESC
""")
genre_count_df.show(10)
# 分析不同年代的哪种体裁的电影最多
most_popular_genre_df = spark.sql("""
SELECT year, genres, count
FROM (
SELECT year, genres, count, ROW_NUMBER() OVER (PARTITION BY year ORDER BY count DESC) AS rank
FROM (
SELECT SUBSTR(release_date, 1, 4) AS year, genres, COUNT(*) AS count
FROM movies
GROUP BY SUBSTR(release_date, 1, 4), genres
) AS genre_count
) AS ranked_genre_count
WHERE rank = 1
ORDER BY year
""")
most_popular_genre_df.show(10)
# 导出结果到 HDFS
genre_count_df.write.csv("hdfs://localhost:9000/output/genre_count", header=True)
most_popular_genre_df.write.csv("hdfs://localhost:9000/output/most_popular_genre", header=True)
```
代码中,我们首先创建了一个 SparkSession 实例,然后读取了 `movies.csv`、`ratings.csv` 和 `tags.csv` 文件,并将它们注册为临时表。接着,我们使用 Spark SQL 统计不同体裁、年份的电影数量,并按照年份和数量的降序排序。最后,我们分析不同年代的哪种体裁的电影最多,并将结果导出到 HDFS 上。
运行上述代码后,将会输出前 10 条不同体裁、年份的电影数量和前 10 条不同年代的哪种体裁的电影最多的结果,并将结果保存到 HDFS 上的 `/output` 目录下。
阅读全文