Как преобразовать странную строку даты и времени с часовым поясом в метку времени (PySpark) - PullRequest
0 голосов
/ 19 марта 2019

У меня есть столбец с именем datetime, представляющий собой строку вида

Month Name DD YYYY H:MM:SS,nnn AM/PM TZ 

, где nnn - точность наносекунды, AM / PM говорит само за себя, а TZ - часовой пояс, например, MDT

* 1005.* Например:
Mar 18 2019 9:48:08,576 AM MDT
Mar 18 2019 9:48:08,623 AM MDT
Mar 18 2019 9:48:09,273 AM MDT

Точность наносекунды важна, так как записи очень близки по времени.TZ не является обязательным, поскольку все они находятся в одном часовом поясе, но в идеале хотели бы также это зафиксировать.

Может ли PySpark справиться с этим?Я попытался использовать unix_timestamp без удачи.

Редактировать

Пробовал

%sql
formatw = 'MMM dd yyyy H:mm:ss,SSS a z'
select to_date(string)
from table

Get error:

Error in SQL statement: ParseException: 
mismatched input 'format' expecting {'(', 'SELECT', 'FROM', 'ADD', 'DESC', 'WITH', 'VALUES', 'CREATE', 'TABLE', 'INSERT', 'DELETE', 'DESCRIBE', 'EXPLAIN', 'SHOW', 'USE', 'DROP', 'ALTER', 'MAP', 'SET', 'RESET', 'START', 'COMMIT', 'ROLLBACK', 'MERGE', 'UPDATE', 'CONVERT', 'REDUCE', 'REFRESH', 'CLEAR', 'CACHE', 'UNCACHE', 'DFS', 'TRUNCATE', 'ANALYZE', 'LIST', 'REVOKE', 'GRANT', 'LOCK', 'UNLOCK', 'MSCK', 'EXPORT', 'IMPORT', 'LOAD', 'OPTIMIZE'}(line 1, pos 0)

1 Ответ

1 голос
/ 19 марта 2019

Я бы порекомендовал вам взглянуть на pyspark.sql.functions.to_date (col, format = None) function.

Из документации:

Преобразует столбец pyspark.sql.types.StringType или pyspark.sql.types.TimestampType в pyspark.sql.types.DateType, используя необязательно указанный формат. Укажите форматы в соответствии с SimpleDateFormats. По умолчанию он следует правилам приведения в pyspark.sql.types.DateType, если формат не указан (эквивалентно col.cast ("date")).

Таким образом, вы можете использовать все шаблоны Date, указанные в Java - SimpleDateFormat .

Если вы хотите использовать форматы Python, то я бы порекомендовал определить ваш собственный UDF с помощью datetime. Но использование Spark дает лучшую производительность, и оно уже определено.

Кроме того, это наносекунды или миллисекунды (H:mm:ss,SSS)?

...