我有一个名为datetime的列,它是形式为
的字符串Month Name DD YYYY H:MM:SS,nnn AM/PM TZ
其中nnn是纳秒精度,AM / PM是自解释性,TZ是时区,例如MDT
例如:
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)
答案 0 :(得分:1)
我建议您看一下pyspark.sql.functions.to_date(col, format=None)函数。
从文档中:
使用可选指定的格式将pyspark.sql.types.StringType或pyspark.sql.types.TimestampType的列转换为pyspark.sql.types.DateType。根据SimpleDateFormats指定格式。默认情况下,如果省略格式(相当于col.cast(“ date”)),它将遵循强制转换规则到pyspark.sql.types.DateType。
因此,您可以使用Java - SimpleDateFormat中指定的所有日期模式。
如果要使用Python格式,则建议使用datetime
定义自己的UDF。但是,使用Spark的性能更好,并且已经定义。
此外,它是纳秒还是毫秒(H:mm:ss,SSS
)?