首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自多列的Pyspark日期格式

问来自多列的Pyspark日期格式
EN

Stack Overflow用户
提问于 2021-02-04 01:00:00
回答 2查看 421关注 0票数 0

我的数据框中有四个字符串列'hour', 'day', 'month', 'year'。我想创建格式为'dd/MM/yyyy HH:mm'的新列fulldate。

代码语言:javascript
复制
df2 = df1.withColumn("fulldate", to_date(concat(col('day'), lit('/'), col('month'), lit('/'), col('year'), lit(' '), col('hour'), lit(':'), lit('0'), lit('0')), 'dd/MM/yyyy HH:mm'))

但它似乎不起作用。我得到的格式是"yyyy-mm-dd“。

我是不是遗漏了什么?

EN

回答 2

Stack Overflow用户

发布于 2021-02-04 01:03:16

使用date_format而不是to_date。

to_date将列从给定格式的转换为日期类型,而date_format将日期类型列转换为给定格式的。

代码语言:javascript
复制
from pyspark.sql.functions import date_format, concat, col, lit

df2 = df1.withColumn(
    "fulldate",
    date_format(
        concat(col('year'), lit('/'), col('month'), lit('/'), col('day'), lit(' '), col('hour'), lit(':'), lit('00'), lit(':'), lit('00')),
        'dd/MM/yyyy HH:mm'
    )
)

为了获得更好的可读性,您可以使用format_string

代码语言:javascript
复制
from pyspark.sql.functions import date_format, format_string, col

df2 = df1.withColumn(
    "fulldate",
    date_format(
        format_string('%d/%d/%d %d:00:00', col('year'), col('month'), col('day'), col('hour')),
        'dd/MM/yyyy HH:mm'
    )
)
票数 1
EN

Stack Overflow用户

发布于 2021-02-04 02:42:04

对于Spark 3+,您可以使用make_timestamp函数从这些列创建时间戳列,并使用date_format将其转换为所需的日期模式:

代码语言:javascript
复制
from pyspark.sql import functions as F

df2 = df1.withColumn(
    "fulldate",
    F.date_format(
        F.expr("make_timestamp(year, month, day, hour, 0, 0)"),
        "dd/MM/yyyy HH:mm"
    )
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66032182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档