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

PySpark分组统计球员夺冠次数:需过滤特定赛事并排序求助

解决方案

直接给你修正后的完整代码,同时说明关键调整点:

from pyspark.sql.functions import col, lower

# 读取数据集
game_info = spark.read.load("/content/chess/chess_wc_history_game_info.csv",
                     format="csv", sep=",", inferSchema="true", header="true")

# 过滤掉event以"k.o."或"KO"结尾的行
filtered_data = game_info.filter(
    ~(col("event").endsWith("k.o.") | col("event").endsWith("KO"))
)

# 按球员分组统计总夺冠次数,重命名字段并按次数降序排列
result = filtered_data.groupBy("winner").count() \
    .withColumnRenamed("winner", "player_name") \
    .withColumnRenamed("count", "number_of_wins") \
    .orderBy(col("number_of_wins").desc())

# 展示结果
result.show()

关键调整说明:

  1. 过滤逻辑:用~取反,结合endsWith精准剔除event字段以"k.o."或"KO"结尾的记录。如果要兼容大小写变体(比如"Ko"、"K.O."),可以转成小写后判断:
    filtered_data = game_info.filter(
        ~lower(col("event")).endsWith("k.o.") & ~lower(col("event")).endsWith("ko")
    )
    
  2. 分组修正:你原代码同时按winner、event、tournament_name分组,得到的是球员单赛事夺冠次数,而需求是总夺冠次数,所以只保留winner作为分组键。
  3. 字段重命名:用withColumnRenamed把默认的winner和count改成需求指定的player_name、number_of_wins。
  4. 排序处理:通过orderBy结合desc()实现按夺冠次数降序排列。

内容的提问来源于stack exchange,提问作者Samar Pratap Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:48:14