一.實驗題目
? ?實驗所需要求:? centos7虛擬機 pyspark spark python3 hadoop分布式
統計歷屆春晚的節目數目
統計各個類型節目的數量,顯示前10名
統計相聲類節目歷年的數目。
查詢每個演員在春晚上表演節目的數量。
統計每年各類節目的數量,打印(節目類型、年份、數量),按照節目類型升序排序,節目類型相同時其次按照年份降序排序
二 實驗代碼
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, count, desc, asc, split, explode
# 創建 SparkSession
spark = SparkSession.builder \
? ? .appName("SpringFestivalGalaAnalysis") \
? ? .getOrCreate()
# 讀取 CSV 文件
df = spark.read.csv("party.csv", sep="\t", header=False, inferSchema=True)
# 為 DataFrame 設置列名
columns = ["year", "program_type", "program_name", "performers"]
df = df.toDF(*columns)
# 統計歷屆春晚的節目數目
total_programs = df.count()
print(f"Total programs: {total_programs}")
# 統計各個類型節目的數量,顯示前10名
program_type_counts = df.groupBy("program_type").count().orderBy(col("count").desc()).limit(10)
program_type_counts.show()
# 統計相聲類節目歷年的數目
xiangsheng_counts = df.filter(col("program_type") == "相聲").groupBy("year").count().orderBy("year")
xiangsheng_counts.show()
# 查詢每個演員在春晚上表演節目的數量
# 將 performers 字段拆分并展開
performers_df = df.withColumn("performer", explode(split(col("performers"), "、")))
performer_counts = performers_df.groupBy("performer").count().orderBy(col("count").desc())
performer_counts.show()
# 統計每年各類節目的數量,打印(節目類型、年份、數量)
# 按照節目類型升序排序,節目類型相同時其次按照年份降序排序
yearly_program_counts = df.groupBy("program_type", "year").count().orderBy([col("program_type").asc(), col("year").desc()])
yearly_program_counts.show()
# 停止 SparkSession
spark.stop()