PySpark - Spark SQL: как преобразовать метку времени со смещением UTC в эпоху / unixtime? - PullRequest
1 голос
/ 20 сентября 2019

Как я могу преобразовать метку времени в формате 2019-08-22T23:57:57-07:00 в unixtime, используя Spark SQL или PySpark?

Самая похожая функция, которую я знаю, это unix_timestamp(), которую она не принимаетвышеуказанный формат времени со смещением UTC.

Любое предложение о том, как я могу подойти к этому, используя предпочтительно Spark SQL или PySpark?

Спасибо

1 Ответ

1 голос
/ 20 сентября 2019

Шаблон java SimpleDateFormat для ISO 8601 часового пояса в этом случае 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 более полные, чем документы по питону.Это может быть полезно в будущем.

...