Pyspark在两种日期类型之间转换

时间:2019-06-11 20:23:46

标签: python apache-spark dataframe pyspark

我在pyspark中将具有一种格式的日期列转换为另一种格式时遇到麻烦。我知道有一种简单的方法可以实现此目标,但不知道如何实现。我已经有它们的格式了

2019-05-21T13:35:16.203Z

并且我希望它采用以下格式

6/10/2019  6:33:34 PM

部分问题是我不知道调用spark dataframe函数来调用这些格式是什么。

2 个答案:

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