PySpark:基于其他列的空值创建新列的实现方法
PySpark 基于列空值创建新列的实现方案
假设你的输入DataFrame包含多列,需要根据这些列的空值情况生成新列(比如标记缺失列、判断是否存在空值等),以下是对应实现方法:
1. 创建标记列:判断是否存在任意空值
如果只需标记该行是否有任意列为空,可结合when、any和isNull实现:
from pyspark.sql import functions as F # 指定需要检查空值的列 check_columns = ["Name", "Age", "City"] # 新增has_missing列:有任意空值标记为1,否则为0 df = df.withColumn( "has_missing", F.when(F.any(F.col(c).isNull() for c in check_columns), 1).otherwise(0) )
2. 创建列:列出所有缺失的列名
如果需要将该行所有空值的列名拼接成字符串(如示例输出的需求),可使用concat_ws配合条件判断:
from pyspark.sql import functions as F check_columns = ["Name", "Age", "City"] # 生成每个列的空值判断表达式:为空则返回列名,否则返回空字符串 missing_cols_expr = [ F.when(F.col(c).isNull(), F.lit(c)).otherwise(F.lit("")) for c in check_columns ] # 拼接非空的列名,无空值时显示"None" df = df.withColumn( "Missing_Columns", F.when( F.any(F.col(c).isNull() for c in check_columns), F.concat_ws(", ", *missing_cols_expr) ).otherwise(F.lit("None")) )
3. 按特定空值组合生成自定义标记
如果需要根据不同的空值组合生成对应描述,可通过多条件when实现:
from pyspark.sql import functions as F df = df.withColumn( "missing_flag", F.when(F.col("Age").isNull(), "Age缺失") .when(F.col("Name").isNull() & F.col("City").isNull(), "姓名和城市缺失") .when(F.col("Name").isNull(), "姓名缺失") .when(F.col("City").isNull(), "城市缺失") .otherwise("无缺失") )
执行完上述代码后,用df.show()即可查看转换后的结果是否符合预期。
内容的提问来源于stack exchange,提问作者Himanshu Gaur
相关产品推荐
相关产品推荐

