PySpark从标题列提取连续4位数字生成新列的技术问题
PySpark提取DataFrame标题列中的连续四位数字
你的原有方法失效的原因是依赖「取字符串最后四位」的逻辑,仅适用于年份恰好位于标题末尾的场景,当标题末尾是其他内容时(比如"Incredible"的末尾字母、"Skate (1991) board"的末尾单词),就会提取错误结果。
正确的做法是使用PySpark的regexp_extract函数,通过正则表达式精准匹配任意位置的连续四位数字:
import pyspark.sql.functions as F # 提取标题中任意位置的连续4位数字,生成yearOfRelease列 movies_DF = movies_DF.withColumn( "yearOfRelease", F.regexp_extract("title", r"\d{4}", 0) )
参数说明
regexp_extract的第三个参数0表示提取整个匹配的内容(正则\d{4}匹配任意4个连续数字)。- 如果需要更精准匹配年份(仅提取19XX或20XX格式的年份),可以将正则改为
r"(19|20)\d{2}",避免提取无关的四位数字。
处理无匹配的情况
如果需要过滤掉没有提取到年份的行(比如"Incredible"这类无年份的标题),可以添加过滤条件:
movies_DF = movies_DF.filter(F.col("yearOfRelease") != "")
测试结果
针对你提供的标题样本,提取结果如下:
- Under Ground2(1990) → 1990
- Waterword(1995) → 1995
- Incredible → 空字符串(可通过过滤移除)
- Skate (1991) board → 1991
- That girl 2002 → 2002
内容的提问来源于stack exchange,提问作者balloon
相关产品推荐
相关产品推荐

