如何在PySpark DataFrame中提取首个数字字符串并转为日期列
解决方案:提取首个日期格式数字并转换为日期列
不用绕弯子拆分数组,直接对languages字段用正则提取一步搞定——匹配首个连续8位数字串(对应YYYYMMDD日期格式),再转成日期类型即可。
完整代码示例
data = [ ("James","Java_Scala_C++_20230510_2023051345"), ("Mindy", "Spark_Java_20211014_20211014255_C++"), ("Julia", "CSharp_20200115_VB") ] from pyspark.sql.types import StringType, StructType,StructField from pyspark.sql.functions import regexp_extract, to_date schema = StructType([ StructField("name",StringType(),True), StructField("languages",StringType(),True) ]) df = spark.createDataFrame(data=data,schema=schema) # 新增列:提取首个8位数字并转为日期类型 df = df.withColumn("first_date", to_date(regexp_extract("languages", r"(\d{8})", 1), "yyyyMMdd")) # 按你要的格式输出结果 for row in df.collect(): print(f"{row.name}: {row.first_date.strftime('%Y%m%d')}")
代码说明
regexp_extract("languages", r"(\d{8})", 1):从languages字符串里抓第一个连续8位数字,第三个参数1表示取正则表达式中第一个括号捕获的内容to_date(..., "yyyyMMdd"):把提取到的数字串转换成PySpark标准日期类型- 最后循环遍历的代码会输出你期望的文本格式
运行结果
执行后会输出:
James: 20230510 Mindy: 20211014 Julia: 20200115
内容的提问来源于stack exchange,提问作者SunflowerParty
相关产品推荐
相关产品推荐

