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

PySpark DataFrame筛选数据报语法错误、show方法无法打印结果问题求助

问题原因分析
  • 误用f.when()函数:f.when()是用于条件判断生成新字段的函数,必须传入「判断条件+条件成立返回值」两个参数,你代码中只传入了条件,没有给出返回值,同时筛选行的需求应该使用filter()/where()函数实现,而非搭配select使用when。
  • 逻辑条件矛盾:你在判断gender_ratio介于0.45~0.55的同时,又加了gender_ratio >= 10000的条件,两个条件完全互斥,即使语法修正也无法筛选出任何数据,推测是你误把total(总人数)的判断条件写错了字段。
  • 括号不匹配:代码中f.when()的括号没有正确闭合,属于基础语法错误。
修正方案

直接使用filter方法实现行筛选,修正后的代码如下:

import pyspark.sql.functions as f

df_ssaGenderWithinTenPercent = df_ssaGender.select("name", "women", "men", "total", "gender", "gender_ratio") \
    .filter(
        (f.col("gender_ratio") > 0.45) & 
        (f.col("gender_ratio") < 0.55) & 
        (f.col("total") >= 10000)
    ) \
    .orderBy(["gender", "gender_ratio"], ascending = False)

df_ssaGenderWithinTenPercent.show()

如果你的gender_ratio字段存储的是带%的字符串类型,需要先转成小数再判断,额外加一步转换即可:

# 把gender_ratio从百分比字符串转成小数
df_ssaGender = df_ssaGender.withColumn("gender_ratio", f.regexp_replace(f.col("gender_ratio"), "%", "").cast("float")/100)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:45:03