pyspark 在pysark Dataframe 中将日期从"yyyy/mm/dd"格式转换为"M/d/yyyy"格式

vatpfxk5  于 2022-11-28  发布在  Spark
关注(0)|答案(2)|浏览(146)

我正在读取一个数据表到一个 Dataframe ,其中有一列"day_dt",其日期格式为"2022/01/08"。我希望格式为"1/8/2022"(M/d/yyyy)。在pyspark中可以吗?我尝试使用date_format(),但结果为空。

hm2xizp9

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|
+----------+----------+

希望能有所帮助。

mdfafbf1

mdfafbf12#

如果您的意思是您有一个格式为“yyyy/mm/dd”的字符串日期,并且您想将其转换为格式为“M/d/yyyy”的字符串,那么:

  • 首先使用to_date()将字符串解析为Date类型。
  • 然后,使用date_format将Date类型转换为字符串。
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|
+-----------+----------+------------+

相关问题