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

PySpark如何从year列提取4位数字拼接固定字符串生成yyyy-01-01日期

问题原因

你代码运行全返回null的核心问题是:PySpark中+运算符默认用于数值列的加法计算,不能直接用来拼接字符串类型的Column对象。你尝试将regexp_extract返回的字符串Column和-01-01用+拼接时,PySpark会尝试把两侧内容转换为数值做计算,转换失败就统一返回null。

另外你用的正则r"^\d{4}"只能匹配字符串开头的4位连续数字,如果你的需求是只要字符串中包含任意位置的4位连续数字就提取,可以去掉正则开头的^定位符。

正确实现代码

首先导入需要依赖的PySpark函数:

from pyspark.sql.functions import col, regexp_extract, when, concat, lit

修改后的逻辑代码:

df = spark.createDataFrame([("1997",), ("early 2000",)], ["year"])
df2 = df.withColumn(
    "date",
    # 若需要匹配任意位置的4位数字,把正则替换为 r"\d{4}" 即可
    when(regexp_extract(col("year"), r"^\d{4}", 0) != "", 
         concat(regexp_extract(col("year"), r"^\d{4}", 0), lit("-01-01"))
    ).otherwise(None)
)

df2.show()

运行输出

+-----------+----------+
|       year|      date|
+-----------+----------+
|       1997|1997-01-01|
|early 2000|      null|
+-----------+----------+

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:54:04