PySpark DataFrame:基于列的存在性与值生成新列
解决方案
要实现需求,你需要先判断DataFrame中是否存在列C,再结合条件逻辑生成F列——直接在when语句里引用不存在的列会触发报错,所以必须先做列存在性检查:
代码实现
from pyspark.sql import functions as F # 假设原DataFrame名为df has_c_column = "C" in df.columns # 生成目标DataFrame B df_b = df.withColumn("D", F.col("A")) \ .withColumn("E", F.col("B")) \ .withColumn( "F", F.when(has_c_column & F.col("C").isNotNull(), "J") .otherwise("N") ) \ .drop("A", "B", "C") # 移除原列,保留目标列D、E、F
逻辑说明
- 列存在性检查:通过
"C" in df.columns判断列C是否存在,得到布尔值has_c_column - 生成F列:
- 当
has_c_column为True且C的值非空时,F列赋值为"J" - 其他所有情况(列
C不存在,或C的值为空),F列赋值为"N"
- 当
- 列重命名与清理:将原列
A、B重命名为D、E,最后移除原列得到目标结构
测试场景验证
当原DataFrame包含列
C时:A B C 1 a "Test" 2 b null 3 c "Test2" 生成的
df_b结果:D E F 1 a J 2 b N 3 c J 当原DataFrame不包含列
C时,F列所有值均为"N"
内容的提问来源于stack exchange,提问作者R Stub
相关产品推荐
相关产品推荐

