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
相关产品推荐
相关产品推荐

