PySpark多列合并:仅当col3、col4非空时生成JSON列col5
解决方案
你当前的代码使用struct会生成包含Null值的结构体,不符合“任一列为Null则col5为Null”的要求。要实现需求,需要结合条件判断和JSON转换,以下是可行的实现方式:
核心实现代码
from pyspark.sql import functions as F df = df.select( "col1", "col2", F.when( # 同时校验col3和col4均不为Null F.col("col3").isNotNull() & F.col("col4").isNotNull(), # 将两列组成的结构体转换为JSON格式字符串 F.to_json(F.struct("col3", "col4")) ).alias("col5") )
逻辑说明
when函数先判断col3和col4是否都不为Null:- 满足条件时,用
struct将两列组合成结构体,再通过to_json转换为标准JSON字符串; - 不满足条件时自动返回Null,完全匹配你的需求。
- 满足条件时,用
示例效果
假设原DataFrame数据如下:
| col1 | col2 | col3 | col4 |
|---|---|---|---|
| 1 | a | x | y |
| 2 | b | null | z |
| 3 | c | m | null |
| 4 | d | null | null |
处理后col5的结果为:
| col5 |
|---|
| {"col3":"x","col4":"y"} |
| null |
| null |
| null |
内容的提问来源于stack exchange,提问作者user20986502
相关产品推荐
相关产品推荐

