【问题标题】:PySpark - Spark SQL: how to convert timestamp with UTC offset to epoch/unixtime?PySpark - Spark SQL:如何将带有 UTC 偏移量的时间戳转换为纪元/unixtime?
【发布时间】:2019-09-20 13:30:57
【问题描述】:

如何使用 Spark SQL 或 PySpark 将 2019-08-22T23:57:57-07:00 格式的时间戳转换为 unixtime?

我知道的最相似的函数是unix_timestamp(),它不接受上述带有UTC偏移的时间格式。

关于我如何最好使用 Spark SQL 或 PySpark 的任何建议?

谢谢

【问题讨论】:

    标签: pyspark apache-spark-sql pyspark-sql


    【解决方案1】:

    在这种情况下,ISO 8601time zone 的 java SimpleDateFormat 模式是 XXX

    所以你需要使用yyyy-MM-dd'T'HH:mm:ssXXX作为你的格式字符串。

    SparkSQL

    spark.sql(
        """select unix_timestamp("2019-08-22T23:57:57-07:00", "yyyy-MM-dd'T'HH:mm:ssXXX") 
        AS epoch"""
    ).show(truncate=False)
    #+----------+
    #|epoch     |
    #+----------+
    #|1566543477|
    #+----------+
    

    Spark 数据帧

    from pyspark.sql.functions import unix_timestamp
    
    df = spark.createDataFrame([("2019-08-22T23:57:57-07:00",)], ["timestamp"])
    df.withColumn(
        "unixtime", 
        unix_timestamp("timestamp", "yyyy-MM-dd'T'HH:mm:ssXXX")
    ).show(truncate=False)
    #+-------------------------+----------+
    #|timestamp                |unixtime  |
    #+-------------------------+----------+
    #|2019-08-22T23:57:57-07:00|1566543477|
    #+-------------------------+----------+
    

    请注意,pyspark 只是 spark 的一个包装器 - 通常我发现 scala/java 文档比 python 文档更完整。将来可能会有所帮助。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    • 2016-10-23
    • 2020-06-24
    • 2021-12-11
    • 1970-01-01
    • 2022-06-27
    • 2019-04-19
    相关资源
    最近更新 更多