Pyspark分割日期字符串

时间:2018-03-27 09:14:42

标签: python apache-spark pyspark apache-spark-sql

我有一个数据框,想要拆分start_date列(字符串和年份)并在新列中保留年份(第4列):

 ID           start_date         End_date  start_year
|01874938|   August 2013|   December 2014|       2013|
|00798252|    March 2009|        May 2015|       2009|
|02202785|  July 2, 2014|January 15, 2016|        2, |
|01646125| November 2012|   November 2015|       2012|

如你所见,我可以分割日期并保留年份。但是对于第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))

2 个答案:

答案 0 :(得分:2)

您可以使用正则表达式而不是,上的分割。

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

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

答案 1 :(得分:2)

您还可以提取列start_date的最后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|
+-------------+----------+