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

PySpark DataFrame如何筛选包含至少一个Null值的行?

筛选PySpark DataFrame中包含至少一个Null值的行

当然可以筛选整个DataFrame中包含至少一个Null值的行,以下是几种实用方法:

方法1:遍历所有列构建逻辑或条件

通过检查每一列是否为Null,再将所有列的条件用**逻辑或(|)**组合,只要任意一列是Null,该行就会被筛选出来。如果使用PySpark 3.0+版本,可直接用any()函数简化代码:

from pyspark.sql import SparkSession
from pyspark.sql.functions import col, any

# 初始化SparkSession
spark = SparkSession.builder.appName("filter_null_rows").getOrCreate()

# 示例DataFrame
data = [
    (1, "Alice", None),
    (2, None, 25),
    (3, "Bob", 30),
    (None, "Charlie", None)
]
df = spark.createDataFrame(data, ["id", "name", "age"])

# 筛选包含至少一个Null的行
null_rows = df.filter(any(col(c).isNull() for c in df.columns))
null_rows.show()

如果你的PySpark版本低于3.0,可用functools.reduce组合条件:

from functools import reduce
from pyspark.sql.functions import col

# 构建"任意一列为Null"的条件
null_condition = reduce(lambda a, b: a | b, [col(c).isNull() for c in df.columns])
null_rows = df.filter(null_condition)
null_rows.show()

方法2:利用dropna()反选

dropna()方法默认会移除所有包含至少一个Null值的行,我们可以通过计算原DataFrame与无Null行的差集,得到包含Null的行:

# 获取所有无Null值的行
non_null_rows = df.dropna()
# 差集操作得到包含至少一个Null的行
null_rows = df.subtract(non_null_rows)
null_rows.show()

这种方法无需手动遍历列,适合列数较多的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 16:57:34