代码之家  ›  专栏  ›  技术社区  ›  PineNuts0

Pyspark:将12小时制的字符串Datetime转换为24小时制的日期时间(时区更改)

  •  0
  • PineNuts0  · 技术社区  · 7 年前

    Timestamp (CST)
    12/8/2018 05:23 PM
    11/29/2018 10:20 PM
    

    我根据下面的建议尝试了以下代码,但返回了null值。

    df = df.withColumn('Timestamp (CST)_2', from_unixtime(unix_timestamp(col(('Timestamp (CST)')), "yyyy/MM/dd hh:mm:ss aa"), "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"))
    
    df = df.withColumn("Timestamp (CST)_3", F.to_timestamp(F.col("Timestamp (CST)_2")))
    

    --------------------------------------------------------------------------------


    我有一个名为“Timestamp(CST)”的字段,它是一个 一串 . 现在是中央标准时间。

    Timestamp (CST)
    2018-11-21T5:28:56 PM
    2018-11-21T5:29:16 PM
    

    下面是我想要的表,我希望数据类型是时间戳:

    Timestamp (CST)_2
    2018-11-21T17:28:56.000Z
    2018-11-21T17:29:16.000Z
    

    df = df.withColumn("Timestamp (CST)_2", to_timestamp("Timestamp (CST)", "yyyy/MM/dd h:mm p"))
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   pvy4917    7 年前

    第一,进口 from_unixtime unix_timestamp col 使用

    from pyspark.sql.functions import from_unixtime, unix_timestamp, col
    

    DataFrame df_time

    >>> cols = ['Timestamp (CST)']
    >>> vals = [
    ...         ('2018-11-21T5:28:56 PM',),
    ...         ('2018-11-21T5:29:16 PM',)]
    >>> df_time = spark.createDataFrame(vals, cols)
    >>> df_time.show(2, False)
    +---------------------+
    |Timestamp (CST)      |
    +---------------------+
    |2018-11-21T5:28:56 PM|
    |2018-11-21T5:29:16 PM|
    +---------------------+
    

    那么,我的方法就是

    >>> df_time_twenfour = df_time.withColumn('Timestamp (CST)', \
    ...             from_unixtime(unix_timestamp(col(('Timestamp (CST)')), "yyyy-MM-dd'T'hh:mm:ss aa"), "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"))
    >>> df_time_twenfour.show(2, False)
    +------------------------+
    |Timestamp (CST)         |
    +------------------------+
    |2018-11-21T17:28:56.000Z|
    |2018-11-21T17:29:16.000Z|
    +------------------------+
    

    笔记

    • HH 而不是 hh .
    • 因为,你有一个 PM aa 在里面 yyyy-MM-dd'T'hh:mm:ss aa

    • 您的输入字符串 T

        2
  •  0
  •   prashanth    4 年前

    选择权 aa 正如@pyy4917的回答中提到的,可能会出现遗留错误。要修复它,请更换 具有 a .

    df_time_twenfour = df_time.withColumn('Timestamp (CST)', \ ...    
     from_unixtime(unix_timestamp(col(('Timestamp (CST)')), \...
    "yyyy-MM-dd'T'hh:mm:ss a"), "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"))
    
    推荐文章