You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark中合并when子句内TYPE2与TYPE3条件的实现求助

没问题,我帮你把分散的条件合并成单条when语句,同时严格保留原代码的执行逻辑(Spark的when是按顺序匹配,第一个满足的条件会生效,这点很重要):

df2 = df1.withColumn(
    "DEVICETYPE",
    when(length(col("deviceid")) == 21, lit("type1"))
    # 合并TYPE2的两个触发条件,用逻辑或连接
    .when(col("DEVICESERIALNO").like("1200125%") | length(col("deviceid")) == 17, lit("type2"))
    # 合并TYPE3的两个触发条件,用逻辑或连接
    .when(col("DEVICESERIALNO").isNull() | length(col("deviceid")) == 17, lit("type3"))
    # 顺便把TYPE4的长度条件也简化了,和原逻辑完全一致
    .when(length(col("deviceid")).isin(7, 5), lit("type4"))
)

额外说明:

  • 原代码里length(col("deviceid")) ==17同时出现在TYPE2和TYPE3的条件中,但因为TYPE2的when排在TYPE3前面,所以当这个条件满足时会优先匹配TYPE2,TYPE3的该条件实际不会被触发,合并后这个逻辑完全保留
  • 逻辑或也可以用更易读的or()方法替代|,比如col("DEVICESERIALNO").like("1200125%").or(length(col("deviceid")) ==17),两种写法效果完全相同
  • 如果你不习惯TYPE4的简化写法,也可以改回原来的两条when语句,不影响功能

内容的提问来源于stack exchange,提问作者Ana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:12:06