Pyspark日期yyyy mmm dd转换

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 =

有一个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 = 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))