请利用https://www.kaggle.com/datasets/whenamancodes/popular movies-datasets-58000-movies?resource=download 中movies.csv的数据,设计数据处理与分析任务(挖掘出有价值的信息,并根据返回结果 简要分析说明),要求分析根据年代的不同类型电影情况,分析不同年代哪种电影体裁最多,采用 2 种不同方式完成。可采用的组件有 MapReduce、HBase、 Hive、Spark core 和 Spark SQL 等;(HiveQL 与基于 Hive 的 Spark SQL 不能同时使用) 3、 相关数据文件必须上传到 HDFS 分布式文件系统上存储,数据处理分析结果需要打 印输出到屏幕上并且导出文件保存到 HDFS 上;(输出结果包含非常多条记录时,请只打印 前 10 条,但是导出到文件的记录须是完整的)
时间: 2024-04-01 10:36:47 浏览: 20
首先,我们需要将数据文件上传到HDFS上,并且使用Spark SQL进行数据处理和分析。以下是实现步骤:
1. 将数据文件上传到HDFS上:
```
hdfs dfs -put /path/to/movies.csv /input/movies.csv
```
2. 创建SparkSession:
```python
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("MoviesAnalysis").getOrCreate()
```
3. 读取数据文件:
```python
movies_df = spark.read.csv("/input/movies.csv", header=True, inferSchema=True)
```
4. 对数据进行处理和分析,采用两种不同的方式:
方式一:使用Spark SQL进行分析
```python
from pyspark.sql.functions import year, explode, split
# 获取电影的年份
movies_df = movies_df.withColumn("year", year(movies_df["release_date"]))
# 分割电影类型
movies_df = movies_df.withColumn("genres", explode(split(movies_df["genres"], "\\|")))
# 根据年代和类型进行聚合
movies_count = movies_df.groupBy("year", "genres").count()
# 找出每个年代最多的电影类型
from pyspark.sql.window import Window
from pyspark.sql.functions import rank
window = Window.partitionBy("year").orderBy(movies_count["count"].desc())
top_genres = movies_count.select("*", rank().over(window).alias("rank")).filter("rank == 1")
# 输出结果到屏幕
top_genres.show(10)
# 将结果保存到HDFS上
top_genres.write.csv("/output/top_genres_by_year.csv")
```
方式二:使用Spark Core进行分析
```python
from pyspark.sql.functions import year, explode, split
# 获取电影的年份
movies_rdd = movies_df.rdd.map(lambda x: (year(x[2]), x[1].split("|")))
# 将电影类型扁平化
movies_rdd = movies_rdd.flatMapValues(lambda x: x)
# 计算每个年代每个电影类型的数量
movies_count_rdd = movies_rdd.map(lambda x: ((x[0], x[1]), 1)).reduceByKey(lambda a, b: a + b)
# 找出每个年代最多的电影类型
top_genres_rdd = movies_count_rdd.map(lambda x: (x[0][0], (x[1], x[0][1]))).groupByKey().mapValues(lambda x: max(x))
# 对结果进行排序并输出结果到屏幕上
top_genres_rdd.sortByKey().take(10)
```
最后,将结果保存到HDFS上:
```python
top_genres_rdd.saveAsTextFile("/output/top_genres_by_year.txt")
```
根据以上两种方式的分析结果,我们可以得到哪些电影类型在不同年代最为流行,该信息对于电影制片厂在选择电影类型时会有所帮助。另外,我们也可以根据这些数据分析出电影市场的变化趋势,有助于电影市场的投资和经营决策。