Apache spark 来自多个列的Pyspark日期格式
我的数据框中有四个字符串列Apache spark 来自多个列的Pyspark日期格式,apache-spark,pyspark,apache-spark-sql,Apache Spark,Pyspark,Apache Spark Sql,我的数据框中有四个字符串列“小时”、“天”、“月”、“年”。我想以'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
“小时”、“天”、“月”、“年”
。我想以'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”
我遗漏了什么吗?使用
日期格式
而不是到日期
to_date
将列从给定格式转换为日期类型,而date\u格式将日期类型列转换为给定格式
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'
)
)
为了提高可读性,您可以使用格式\u字符串
:
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'
)
)
使用date\u格式
而不是到日期
to_date
将列从给定格式转换为日期类型,而date\u格式将日期类型列转换为给定格式
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'
)
)
为了提高可读性,您可以使用格式\u字符串
:
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'
)
)
对于Spark 3+,您可以使用函数从这些列创建时间戳列,并使用将其转换为所需的日期模式:
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"
)
)
对于Spark 3+,您可以使用函数从这些列创建时间戳列,并使用将其转换为所需的日期模式:
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"
)
)
date\u格式
采用日期/时间戳类型,并以给定格式模式返回字符串to_date
使用给定模式从日期字符串返回日期类型。您需要将添加到\u时间戳(conact(…
和添加到\u时间戳(格式化\u字符串(…
否则它将返回null,我想。@Blackishop如果我错了,请纠正我,但说明date\u格式
也采用字符串类型…?是的,但仅当字符串日期为默认格式时:yyyy-MM-dd
用于日期或yyyy-MM-dd HH:MM:ss
用于时间戳。@Blackishop啊,谢谢,我没有意识到这一点asn不是标准格式。将进行编辑以确保标准的date\u格式
采用日期/时间戳类型并以给定格式模式返回字符串。to\u date
使用给定模式从日期字符串返回日期类型。您需要将添加到\u时间戳(conact(…
和添加到\u时间戳(格式字符串(…
否则它将返回null,我想。@Blackishop如果我错了,请纠正我,但说明date\u格式
也采用字符串类型…?是的,但仅当字符串日期为默认格式时:yyyy-MM-dd
用于日期或yyyy-MM-dd HH:MM:ss
用于时间戳。@Blackishop啊,谢谢,我没有意识到这一点asn不是标准格式。将进行编辑以确保它是标准格式