Pyspark: конвертировать строковую дату и время в 12-часовое время в 24-часовое время (смена часового пояса) - PullRequest
0 голосов
/ 11 декабря 2018

Редактировать: Извинения, образец данных немного отклонен.Ниже приведен пример исправленного образца данных, который я пытаюсь преобразовать:

Timestamp (CST)
12/8/2018 05:23 PM
11/29/2018 10:20 PM

Я попробовал следующий код на основе приведенной ниже рекомендации, но получил нулевые значения.

df = df.withColumn('Timestamp (CST)_2', from_unixtime(unix_timestamp(col(('Timestamp (CST)')), "yyyy/MM/dd hh:mm:ss aa"), "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"))

df = df.withColumn("Timestamp (CST)_3", F.to_timestamp(F.col("Timestamp (CST)_2")))

--------------------------------------------------------------------------------


У меня естьполе с именем «Timestamp (CST)», которое является строкой .Это в центральное стандартное время.

Timestamp (CST)
2018-11-21T5:28:56 PM
2018-11-21T5:29:16 PM

Как создать новый столбец, который принимает «Метку времени (CST)», изменить его на UTC и преобразовать в дату-время с отметкой времени на 24-часовых часах?

Ниже приведена желаемая таблица, и я хотел бы, чтобы тип данных был меткой времени:

Timestamp (CST)_2
2018-11-21T17:28:56.000Z
2018-11-21T17:29:16.000Z

Я попробовал следующий код, но все результаты вернулись к нулю:

df = df.withColumn("Timestamp (CST)_2", to_timestamp("Timestamp (CST)", "yyyy/MM/dd h:mm p"))

1 Ответ

0 голосов
/ 12 декабря 2018

Во-первых, импортируйте from_unixtime, unix_timestamp и col, используя

from pyspark.sql.functions import from_unixtime, unix_timestamp, col

Затем, восстанавливая ваш сценарий в DataFrame df_time

>>> cols = ['Timestamp (CST)']
>>> vals = [
...         ('2018-11-21T5:28:56 PM',),
...         ('2018-11-21T5:29:16 PM',)]
>>> df_time = spark.createDataFrame(vals, cols)
>>> df_time.show(2, False)
+---------------------+
|Timestamp (CST)      |
+---------------------+
|2018-11-21T5:28:56 PM|
|2018-11-21T5:29:16 PM|
+---------------------+

Затеммой подход был бы

>>> df_time_twenfour = df_time.withColumn('Timestamp (CST)', \
...             from_unixtime(unix_timestamp(col(('Timestamp (CST)')), "yyyy-MM-dd'T'hh:mm:ss aa"), "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"))
>>> df_time_twenfour.show(2, False)
+------------------------+
|Timestamp (CST)         |
+------------------------+
|2018-11-21T17:28:56.000Z|
|2018-11-21T17:29:16.000Z|
+------------------------+

Примечания

  • Если вы хотите, чтобы время было в 24-часовом формате, тогда вы бы использовали HH вместо hh.
  • Так как у вас есть PM, вы используете aa в yyyy-MM-dd'T'hh:mm:ss aa для указания PM.

  • Ваш, входная строка имеет T в этом, так что вы должны указать его в формате выше.

...