You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark如何对拆分展开的电影类型字段分组计算平均评分取TopN

问题根因

你遇到的重复类型分组问题,核心是拆分类型字段时没有处理逗号后的空白字符。你的pandas代码里拆分用的是,\s*正则,会自动忽略逗号后的空格,而纯PySpark的原有代码只用了,拆分,导致拆分出的类型值带前置空格,比如Z会变成 Z,和不带空格的同类型被判定为两个不同值,因此分组后出现重复行。


修正后的纯PySpark实现

首先导入依赖的PySpark函数:

from pyspark.sql.functions import split, explode, col, avg, trim

完整实现代码如下:

# 替换此处的TOP_N为你需要取的Top类型数量
TOP_N = 10

result_df = df.withColumn("genre_arr", split(col("Genres"), ",\s*")) \
    # 展开类型数组为单行单类型结构
    .withColumn("genre", explode("genre_arr")) \
    # 清除类型值前后的残留空白,避免异常分组
    .withColumn("genre", trim(col("genre"))) \
    # 按类型分组计算平均评分
    .groupBy("genre") \
    .agg(avg("Review").alias("avg_review")) \
    # 按评分降序排序取前N个
    .orderBy(col("avg_review").desc()) \
    .limit(TOP_N)

该实现和你的pandas-on-spark逻辑完全对齐,运行后不会再出现重复的类型分组,计算结果和pandas版本一致。


内容的提问来源于stack exchange,提问作者j. m

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 06:06:10