PySpark按分隔符拆分列值生成新列的实现问题(Foundry环境)
PySpark拆分channels列并生成指定新列(缺失值填充~)
你遇到的报错原因是:coalesce函数要求参数为Column对象,直接传入字符串"~"会被PySpark误认为是列名,导致找不到对应列抛出错误。
修正后的代码
需要先导入lit函数,将字符串~转换为Column类型后再传入coalesce:
from pyspark.sql.functions import split, coalesce, lit # 拆分channels列为数组 df = df.withColumn("channels_split", split(df["channels"], ",")) # 生成目标新列,用lit("~")替代直接传字符串"~" df = df.withColumn("channel1", coalesce(df["channels_split"][0], lit("~"))) df = df.withColumn("channel2", coalesce(df["channels_split"][1], lit("~"))) df = df.withColumn("channel3", coalesce(df["channels_split"][2], lit("~"))) df = df.withColumn("channel4", coalesce(df["channels_split"][3], lit("~"))) df = df.withColumn("channel5", coalesce(df["channels_split"][4], lit("~"))) # 删除中间拆分列 df = df.drop("channels_split")
处理后结果示例
| channels | channel1 | channel2 | channel3 | channel4 | channel5 |
|---|---|---|---|---|---|
| name1,name2,name3,name4 | name1 | name2 | name3 | name4 | ~ |
| happy1,happy2 | happy1 | happy2 | ~ | ~ | ~ |
| entity1,entity2,entity3,entity4,entity5 | entity1 | entity2 | entity3 | entity4 | entity5 |
内容的提问来源于stack exchange,提问作者x89
相关产品推荐
相关产品推荐

