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

按赛事分组查找国际象棋赛事获胜者(PySpark/SQL实现)

按赛事分组找出获胜者的解决方案

问题需求

按赛事对数据进行分组,使用PySpark或SQL找出各赛事的获胜者

当前尝试的代码

spark.sql("select event,winner from chess group by event,winner").show()

上述代码仅能列出每个赛事下所有出现过的获胜者,无法确定每个赛事的最终获胜者(比如获胜次数最多的选手)。以下是正确的实现方式:

1. SQL 实现

-- 先统计每个赛事中每个选手的获胜次数
WITH event_win_counts AS (
    SELECT 
        event, 
        winner, 
        COUNT(*) AS win_count
    FROM chess
    GROUP BY event, winner
),
-- 按赛事对获胜次数进行排名
ranked_wins AS (
    SELECT 
        event, 
        winner, 
        win_count,
        RANK() OVER (PARTITION BY event ORDER BY win_count DESC) AS rank
    FROM event_win_counts
)
-- 筛选出每个赛事的第一名获胜者
SELECT event, winner
FROM ranked_wins
WHERE rank = 1;

2. PySpark DataFrame 实现

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

# 统计每个赛事中各选手的获胜次数
win_count_df = chess.groupBy("event", "winner").count().withColumnRenamed("count", "win_count")

# 定义窗口:按赛事分区,按获胜次数降序排列
window_spec = Window.partitionBy("event").orderBy(F.desc("win_count"))

# 添加排名列并筛选出第一名
final_result = win_count_df.withColumn("rank", F.rank().over(window_spec)) \
                          .filter(F.col("rank") == 1) \
                          .select("event", "winner")

final_result.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:30:48