我的数据框中有四个字符串列'hour', 'day', 'month', 'year'。我想创建格式为'dd/MM/yyyy HH:mm'的新列fulldate。
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“。
我是不是遗漏了什么?
发布于 2021-02-04 01:03:16
使用date_format而不是to_date。
to_date将列从给定格式的转换为日期类型,而date_format将日期类型列转换为给定格式的。
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
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'
)
)发布于 2021-02-04 02:42:04
对于Spark 3+,您可以使用make_timestamp函数从这些列创建时间戳列,并使用date_format将其转换为所需的日期模式:
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"
)
)https://stackoverflow.com/questions/66032182
复制相似问题