Преобразование строкового времени в дневное время - PullRequest
1 голос
/ 17 июня 2019

Я только начал работать в Pyspark, и мне нужна помощь в преобразовании типа столбца.В моем фрейме данных есть строковый столбец, в котором хранится время суток в AM / PM, и мне нужно преобразовать его в datetime для дальнейшей обработки / анализа.

fd = spark.createDataFrame([(['0143A'])], ['dt'])
fd.show()

+-----+
|   dt|
+-----+
|0143A|
+-----+

from pyspark.sql.functions import date_format, to_timestamp
#fd.select(date_format('dt','hhmma')).show()
fd.select(to_timestamp('dt','hhmmaa')).show()

+----------------------------+
|to_timestamp(`dt`, 'hhmmaa')|
+----------------------------+
|                        null|
+----------------------------+

Expected output: 01:43

Как получить правильный формат даты и времени вВышеприведенный сценарий?

Спасибо за помощь!

1 Ответ

2 голосов
/ 17 июня 2019

Если мы посмотрим на документ для to_timestamp (http://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.functions.to_timestamp), то увидим, что формат должен быть указан как SimpleDateFormat (https://docs.oracle.com/javase/tutorial/i18n/format/simpleDateFormat.html).

, чтобы получить время суток).в AM / PM мы должны использовать hhmma. Но в SimpleDateFormat a ловит AM или PM, а не A или P. Поэтому нам нужно изменить нашу строку:

import pyspark.sql.functions as F 
df = spark.createDataFrame([(['0143A'])], ['dt'])
df2 = df.withColumn('dt', F.concat(F.col('dt'), F.lit('M')))
df3 = df2.withColumn('ts', F.to_timestamp('dt','hhmma'))
df3.show()

+------+-------------------+
|    dt|                 ts|
+------+-------------------+
|0143AM|1970-01-01 01:43:00|
+------+-------------------+

Если вы хотите получить ее в виде строки в указанном вами формате, вы можете использовать date_format:

df4 = df3.withColumn('time', F.date_format(F.col('ts'), format='HH:mm'))
df4.show()

+------+-------------------+-----+
|    dt|                 ts| time|
+------+-------------------+-----+
|0143AM|1970-01-01 01:43:00|01:43|
+------+-------------------+-----+
...