首页 > 解决方案 > PySpark - Spark SQL:如何将带有 UTC 偏移量的时间戳转换为纪元/unixtime?

问题描述

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

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

关于如何使用 Spark SQL 或 PySpark 来解决这个问题的任何建议?

谢谢

标签: pysparkapache-spark-sqlpyspark-sql

解决方案


在这种情况下, ISO 8601 时区的 javaSimpleDateFormat模式是.XXX

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

火花SQL

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

火花数据框

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 文档更完整。将来可能会有所帮助。


推荐阅读