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

如何修改PySpark代码使空loc列也返回指定数组值?

修改后的PySpark代码
from pyspark.sql import functions as F

L = {'L1': ['us'] }
# df1 = df1.withColumnRenamed("name","OriginalCompanyName")
for key, vals in L.items():
    # regex pattern for extracting vals
    pat = r'\b(%s)\b' % '|'.join(vals)

    # 先判断loc是否为空数组,空数组直接返回["us"]
    # 非空数组则执行正则提取,提取结果为空则返回null,否则返回提取结果
    df1 = df1.withColumn(
        key,
        F.when(
            F.size("loc") == 0,
            F.array(F.lit(vals[0]))
        ).otherwise(
            F.when(
                F.size(F.expr(f"regexp_extract_all(array_join(loc, ' '), '{pat}')")) == 0,
                None
            ).otherwise(
                F.expr(f"regexp_extract_all(array_join(loc, ' '), '{pat}')")
            )
        )
    )

关键修改说明

  • 新增loc列空数组判断逻辑:用F.size("loc") == 0识别空数组行,直接返回["us"]
  • 将原正则提取逻辑嵌套在非空数组分支中,确保只有非空且未匹配到"us"的行才返回null
  • 解决了原代码处理空数组时的异常问题,同时满足空数组返回指定值的需求

验证结果

针对示例数据,输出如下:

locL1
["this is ,us, better life"]["us"]
["no one is, in charge"]null
["I am, very far, from us"]["us"]
[]["us"]

完全符合预期要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 14:09:07