PySpark-Spark SQL:如何将带有UTC偏移量的时间戳转换为epoch / unixtime?

时间:2019-09-20 13:30:57

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

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

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

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

谢谢

1 个答案:

答案 0 :(得分:1)

在这种情况下,SimpleDateFormat的Java ISO 8601time zone模式是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 DataFrame

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只是火花的包装器-通常,我发现scala / java文档比python文档更完整。将来可能会有所帮助。

相关问题