我正在读取一个数据表到一个 Dataframe ,其中有一列"day_dt",其日期格式为"2022/01/08"。我希望格式为"1/8/2022"(M/d/yyyy)。在pyspark中可以吗?我尝试使用date_format(),但结果为空。
hm2xizp91#
是否在使用date_format之前将day_dt列转换为timestamp?下面的代码添加了一个空值列(如您在问题中所述),因为它是StringType。您可以使用df.printSchema()查看它
from pyspark.sql.functions import * from pyspark.sql.types import StringType d = ['2022/01/08'] df = spark.createDataFrame(d, StringType()) df.show() df2 = df.withColumn("newDate", date_format(unix_timestamp(df.value , "yyyy/mm/dd").cast("timestamp"),"mm/dd/yyyy")) df2.show() +----------+ | value| +----------+ |2022/01/08| +----------+ +----------+-------+ | value|newDate| +----------+-------+ |2022/01/08| null| +----------+-------+
将字符串类型转换为时间戳后,日期列的格式设置正确:
from pyspark.sql.functions import * from pyspark.sql.types import StringType d = ['2022/01/08'] df = spark.createDataFrame(d, StringType()) df.show() df2 = df.withColumn("newDate", date_format(unix_timestamp(df.value , "yyyy/mm/dd").cast("timestamp"),"mm/dd/yyyy")) df2.show() +----------+ | value| +----------+ |2022/01/08| +----------+ +----------+----------+ | value| newDate| +----------+----------+ |2022/01/08|01/08/2022| +----------+----------+
希望能有所帮助。
mdfafbf12#
如果您的意思是您有一个格式为“yyyy/mm/dd”的字符串日期,并且您想将其转换为格式为“M/d/yyyy”的字符串,那么:
to_date()
date_format
df = spark.createDataFrame(data=[["2022/01/01",],["2022/12/31",]], schema=["date_str_in"]) df = df.withColumn("date_dt", F.to_date("date_str_in", format="yyyy/MM/dd")) df = df.withColumn("date_str_out", F.date_format("date_dt", format="M/d/yyyy")) +-----------+----------+------------+ |date_str_in| date_dt|date_str_out| +-----------+----------+------------+ | 2022/01/01|2022-01-01| 1/1/2022| | 2022/12/31|2022-12-31| 12/31/2022| +-----------+----------+------------+
2条答案
按热度按时间hm2xizp91#
是否在使用date_format之前将day_dt列转换为timestamp?下面的代码添加了一个空值列(如您在问题中所述),因为它是StringType。您可以使用df.printSchema()查看它
将字符串类型转换为时间戳后,日期列的格式设置正确:
希望能有所帮助。
mdfafbf12#
如果您的意思是您有一个格式为“yyyy/mm/dd”的字符串日期,并且您想将其转换为格式为“M/d/yyyy”的字符串,那么:
to_date()
将字符串解析为Date类型。date_format
将Date类型转换为字符串。