如何在PySpark DataFrame中正确筛选出Month列为null的行
Spark筛选Integer类型空值行的正确方案
问题排查
你现有样例DataFrame结构如下:
| Year | Month | Place | People |
|---|---|---|---|
| 2021 | null | IND | 23000 |
| 2021 | null | USA | 34500 |
| 2021 | 1 | UK | 11600 |
| 2021 | 1 | RUS | 3488 |
原代码无返回的核心原因是:Spark中整数类型的null是系统定义的缺失值标记,不是字符串内容为'null'的普通值,你将列强转为字符串后和'null'字符串做等值匹配,自然无法命中目标行。
正确实现代码
Spark提供了原生的空值判断方法isNull(),无需做类型转换即可直接匹配所有数据类型的空值行,写法如下:
# 需确保已经导入col函数 from pyspark.sql.functions import col df = df.select('Year','Month','Place','People') \ .where(col('Month').isNull()) display(df)
如果后续需要筛选非空的行,替换为isNotNull()方法即可。
你也可以选择SQL表达式风格的写法,效果完全一致:
df = df.select('Year','Month','Place','People') \ .where("Month is null")
内容的提问来源于stack exchange,提问作者user175025
相关产品推荐
相关产品推荐

