Python Pyspark分割日期字符串

Python Pyspark分割日期字符串,python,apache-spark,pyspark,apache-spark-sql,Python,Apache Spark,Pyspark,Apache Spark Sql,我有一个数据框,希望拆分start\u date列(字符串和年份),并在新列(第4列)中仅保留年份: 正如你所看到的,我可以分割日期,保留年份。但是,对于第3行中的日期:“2014年7月2日”,结果是“2”,而不是2014年 这是我的代码: split_col = fn.split(df7_ct_map['start_date'] , ' ') df = df7_ct_map.withColumn('NAME1', split_col.getItem(0)) df = dff.withColu

我有一个数据框,希望拆分
start\u date
列(字符串和年份),并在新列(第4列)中仅保留年份:

正如你所看到的,我可以分割日期,保留年份。但是,对于第3行中的日期:“2014年7月2日”,结果是“2”,而不是2014年

这是我的代码:

split_col = fn.split(df7_ct_map['start_date']  , ' ')
df = df7_ct_map.withColumn('NAME1', split_col.getItem(0))
df = dff.withColumn('start_year', split_col.getItem(1))

您可以使用正则表达式,而不是在
上拆分

df.withColumn('start_year', regexp_extract(df['start_date'], '\\d{4}', 0))

这将匹配4个连续数字,即一年。

您还可以提取列的最后4个字符
开始日期

from pyspark.sql import functions as F

df.withColumn('start_year' , 
      F.expr('substring(rtrim(start_date), length(start_date) - 4,length(start_date) )' ) )
  .show()

+-------------+----------+
|   start_date|start_year|
+-------------+----------+
|  August 2013|      2013|
|   March 2009|      2009|
| July 2, 2014|      2014|
|November 2014|      2014|
+-------------+----------+
from pyspark.sql import functions as F

df.withColumn('start_year' , 
      F.expr('substring(rtrim(start_date), length(start_date) - 4,length(start_date) )' ) )
  .show()

+-------------+----------+
|   start_date|start_year|
+-------------+----------+
|  August 2013|      2013|
|   March 2009|      2009|
| July 2, 2014|      2014|
|November 2014|      2014|
+-------------+----------+