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()
关键调整说明:
- 过滤逻辑:用
~取反,结合endsWith精准剔除event字段以"k.o."或"KO"结尾的记录。如果要兼容大小写变体(比如"Ko"、"K.O."),可以转成小写后判断:filtered_data = game_info.filter( ~lower(col("event")).endsWith("k.o.") & ~lower(col("event")).endsWith("ko") ) - 分组修正:你原代码同时按
winner、event、tournament_name分组,得到的是球员单赛事夺冠次数,而需求是总夺冠次数,所以只保留winner作为分组键。 - 字段重命名:用
withColumnRenamed把默认的winner和count改成需求指定的player_name、number_of_wins。 - 排序处理:通过
orderBy结合desc()实现按夺冠次数降序排列。
内容的提问来源于stack exchange,提问作者Samar Pratap Singh
相关产品推荐
相关产品推荐

