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

