Pyspark日期yyyy mmm dd转换
有一个spark数据框。其中一个col的日期填充格式为2018-1-12 我需要将此结构更改为20180112 如何实现这一点研究Python的datetime库以及strftime和strptime方法: 例如,用作参考:Pyspark日期yyyy mmm dd转换,pyspark,pyspark-sql,Pyspark,Pyspark Sql,有一个spark数据框。其中一个col的日期填充格式为2018-1-12 我需要将此结构更改为20180112 如何实现这一点研究Python的datetime库以及strftime和strptime方法: 例如,用作参考: from datetime import datetime date_string = '2018-Jan-12' # Assuming day of the month is a zero-padded decimal number datetime_object =
from datetime import datetime
date_string = '2018-Jan-12'
# Assuming day of the month is a zero-padded decimal number
datetime_object = datetime.strptime(date_string, '%Y-%b-%d')
converted_date_string = datetime_object.strftime('%Y%m%d')
你可以用
或者,如果需要,可以定义一个大函数来捕获异常
def date_converter(col):
try:
_date = strptime(date_string, '%Y-%b-%d')
str_date = _date.strftime('%Y%m%d')
return str_date
except Exception:
# Some code if needed
return ''
udf_function = f.udf(date_converter, t.StringType())
df = df.withColumn('date_col', udf_function(df.date_col))
注意:我假设date_col是您列的名称。适用于Spark 1.5版+
假设您有以下数据帧:
df=sqlCtx.createDataFrame[2018-1-12,],[date_str]
df.show
+------+
|date_街|
+------+
|2018年1月12日|
+------+
要避免使用UDF,您可以首先:
从pyspark.sql.functions从unix\u unixtime导入,unix\u时间戳
df=df.withColumn'date',来自时间戳'date'str','yyyy-MMM-dd'
df.show
+------+----------+
|日期|街|日期|
+------+----------+
|2018-1-12 | 2018-01-12 00:00:00|
+------+----------+
然后以您想要的格式:
从pyspark.sql.functions导入日期\格式,col
df=df.withColumnnew\u date\u str,date\u formatcoldate,yyyyymmdd
df.show
+------+----------+------+
|日期街|日期街|新日期街|
+------+----------+------+
|2018-1-12 | 2018-01-12 00:00:00 | 20180112|
+------+----------+------+
或者,如果愿意,您可以将其全部链接在一起,并跳过中间步骤:
导入pyspark.sql.f函数
选择
f、 日期格式
f、 从uUnixtime
f、 unix\u时间戳
“date_str”,
“yyyy MMM dd”
,
yyyyMMdd
.别名新日期街
显示
+------+
|新日期街|
+------+
| 20180112|
+------+
一种方法是像中一样使用udf。但首选的方法可能是先做后做。
def date_converter(col):
try:
_date = strptime(date_string, '%Y-%b-%d')
str_date = _date.strftime('%Y%m%d')
return str_date
except Exception:
# Some code if needed
return ''
udf_function = f.udf(date_converter, t.StringType())
df = df.withColumn('date_col', udf_function(df.date_col))