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
相关产品推荐
相关产品推荐

