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

如何在PySpark DataFrame中按品牌筛选Top2热门车型?

解决PySpark获取各品牌前2热门车型的问题

实现步骤

不需要手动遍历品牌,用PySpark的窗口函数就能高效解决,步骤如下:

  1. 统计品牌-车型的出现次数
    先对make和model分组,计算每个组合的出现次数:
from pyspark.sql import functions as F

count_df = df.groupBy("make", "model").agg(F.count("*").alias("count"))
  1. 用窗口函数给每个品牌下的车型排名
    创建一个按make分组、按count降序排序的窗口,然后给每个组内的车型添加排名:
from pyspark.sql.window import Window

window_spec = Window.partitionBy("make").orderBy(F.desc("count"))
ranked_df = count_df.withColumn("rank", F.row_number().over(window_spec))

这里用row_number()会给相同计数的车型分配不同排名,如果想让相同计数的车型获得相同排名(比如并列第一的都保留),可以换成rank()或dense_rank()。

  1. 过滤保留前2名的车型
    筛选出排名小于等于2的行,就是每个品牌的前2热门车型:
top2_models = ranked_df.filter(F.col("rank") <= 2)

完整代码示例

from pyspark.sql import SparkSession
from pyspark.sql import functions as F
from pyspark.sql.window import Window

# 初始化SparkSession(如果还没初始化)
spark = SparkSession.builder.appName("TopModels").getOrCreate()

# 假设df是你的原始DataFrame
count_df = df.groupBy("make", "model").agg(F.count("*").alias("count"))
window_spec = Window.partitionBy("make").orderBy(F.desc("count"))
ranked_df = count_df.withColumn("rank", F.row_number().over(window_spec))
top2_models = ranked_df.filter(F.col("rank") <= 2)

# 查看结果
top2_models.show()

这种方法完全不需要手动遍历品牌,利用PySpark的分布式计算能力,处理大型DataFrame效率更高。

内容的提问来源于stack exchange,提问作者Lieuwe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 07:22:08