Spark конвертировать миллисекунды в UT C datetime - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть набор данных, где 1 столбец - это long, который представляет миллисекунды. Я хочу получить метку времени (yyyy-MM-dd HH:mm:ss), которую представляет это число в UT C. По сути, я хочу использовать то же поведение, что и https://currentmillis.com/

enter image description here

У меня вопрос, есть ли способ конвертировать код Spark? поле длиной в миллисекунды до метки времени в UT C? Все, что мне удалось получить с помощью встроенного кода Spark, - это преобразование этого длинного в мое местное время (EST):

from pyspark import SparkContext
from pyspark.sql import SQLContext
from pyspark.sql import types as T
from pyspark.sql import functions as F

sc = SparkContext()
spark = SQLContext(sc)

df = spark.read.json(sc.parallelize([{'millis':1582749601000}]))

df.withColumn('as_date', F.from_unixtime((F.col('millis')/1000))).show()

+-------------+-------------------+
|       millis|            as_date|
+-------------+-------------------+
|1582749601000|2020-02-26 15:40:01|
+-------------+-------------------+

Я смог преобразовать в UT C, форсировав часовой пояс всей сессии Spark. Я бы хотел этого избежать, потому что неправильно менять весь часовой пояс сеанса Spark для конкретного c варианта использования в этом задании.

spark.sparkSession.builder.master('local[1]').config("spark.sql.session.timeZone", "UTC").getOrCreate()

Я также хотел бы избежать пользовательского определенные функции, которые я хочу развернуть в Scala и Python, без написания кода c для каждого языка.

1 Ответ

0 голосов
/ 17 апреля 2020

Используйте to_utc_timestamp, чтобы указать свой часовой пояс (EST).

    from pyspark.sql import functions as F
    df.withColumn("as_date", F.to_utc_timestamp(F.from_unixtime(F.col("millis")/1000,'yyyy-MM-dd HH:mm:ss'),'EST')).show()

    +-------------+-------------------+
    |       millis|            as_date|
    +-------------+-------------------+
    |1582749601000|2020-02-26 20:40:01|
    +-------------+-------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...