我在pyspark中将具有一种格式的日期列转换为另一种格式时遇到麻烦。我知道有一种简单的方法可以实现此目标,但不知道如何实现。我已经有它们的格式了
2019-05-21T13:35:16.203Z
并且我希望它采用以下格式
6/10/2019 6:33:34 PM
部分问题是我不知道调用spark dataframe函数来调用这些格式是什么。
答案 0 :(得分:0)
如果我对问题的理解正确,则可以使用 from_unixtime 和 unix_timestamp 函数格式化时间戳值,并且 formats 与Java { {3}}
Ex:
>>> spark.sql("""with cte as (select string('2019-05-21T13:35:16.203Z')ts)
select ts,
from_unixtime(
unix_timestamp(ts,"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"),
'M/dd/yyyy hh:mm:ss aaa'
)formatted_ts from cte""").show(1,False)
+------------------------+---------------------+
|ts |formatted_ts |
+------------------------+---------------------+
|2019-05-21T13:35:16.203Z|5/21/2019 01:35:16 PM|
+------------------------+---------------------+
答案 1 :(得分:0)
如果您要转换数据框中的某一列,则需要使用utc时间戳功能
,您还可以使用to_utc_timestamp
方法指定要转换为哪个时区
这是工作代码
df = spark.createDataFrame([('2019-05-21T13:35:16.203Z',)], ['input_date'])
df_2 =df.select(df.input_date,date_format(to_utc_timestamp(df.input_date,""),'MM/dd/yyyy HH:mm:ss aaa').alias('output_date')).show(1, False)
+------------------------+----------------------+
|input_date |output_date |
+------------------------+----------------------+
|2019-05-21T13:35:16.203Z|05/21/2019 09:35:16 AM|
+------------------------+----------------------+