Spark DataFrame如何按指定条件对列求和并赋值给变量
错误原因
你的原有代码存在两个核心问题:
- 缺失了「球员姓名以'D'开头」的判断逻辑
F.when()的使用位置错误:你把when和sum作为两个独立的聚合参数传给了agg,正确的逻辑是将条件判断放在sum内部,仅对符合条件的行的points值做累加
修正后代码
import pyspark.sql.functions as F point_sum = df.agg( F.sum( F.when( # 同时满足两个条件才取points值参与求和 (F.col('name').startswith('D')) & (F.col('age') < 20), F.col('points') ).otherwise(0) # 不符合条件的行贡献0,可省略,显式写出来逻辑更清晰 ) ).collect()[0][0]
结果验证
对照你提供的样例数据,只有Doug符合「D开头+年龄小于20」的要求,最终point_sum的结果为7,和预期一致。
内容的提问来源于stack exchange,提问作者Sam Odle
相关产品推荐
相关产品推荐

