在 pyspark 问题中转换 24 小时日期格式
Posted
技术标签:
【中文标题】在 pyspark 问题中转换 24 小时日期格式【英文标题】:converting 24 hrs date format in pyspark issue 【发布时间】:2020-08-26 16:09:06 【问题描述】:我试图在 spark SQL 中将字符串格式数据类型转换为日期格式,下面是我用来隐藏的查询,但奇怪的是它适用于 12 小时格式而不是 24 小时格式(显示为空)
select from_unixtime(unix_timestamp('19-Aug-2020 10:05:40', 'dd-MMM-yyyy hh:mm:ss'), 'yyyy-MM-dd hh:mm:ss') as timestamp1,from_unixtime(unix_timestamp('19-Aug-2020 14:05:40', 'dd-MMM-yyyy hh:mm:ss'), 'yyyy-MM-dd hh:mm:ss') as timestamp2;
我在这里错过了什么吗??
提前致谢
【问题讨论】:
HH 不是 hh 24 小时 【参考方案1】:这是HH
和hh
的测试。
spark.sql('''
select
to_timestamp('19-Aug-2020 10:05:40', 'dd-MMM-yyyy hh:mm:ss') as timestamp11,
to_timestamp('19-Aug-2020 10:05:40', 'dd-MMM-yyyy HH:mm:ss') as timestamp12,
to_timestamp('19-Aug-2020 14:05:40', 'dd-MMM-yyyy hh:mm:ss') as timestamp21,
to_timestamp('19-Aug-2020 14:05:40', 'dd-MMM-yyyy HH:mm:ss') as timestamp22
''').show()
+-------------------+-------------------+-----------+-------------------+
| timestamp11| timestamp12|timestamp21| timestamp22|
+-------------------+-------------------+-----------+-------------------+
|2020-08-19 10:05:40|2020-08-19 10:05:40| null|2020-08-19 14:05:40|
+-------------------+-------------------+-----------+-------------------+
【讨论】:
【参考方案2】:我们可以使用splitby
Select date.split('-')[2]||'-'||case when length(date.split('-')[0]) = 1 then '0'||date.split('-')[0] else date.split('-')[0] end || case when length(date.split('-')[1]) = 1 then '0'||date.split('-')[1] else date.split('-')[1] end]
Date = date_column
日期格式yyyy-mm-dd
分隔符可以不同。
没有任何日期格式
【讨论】:
【参考方案3】:我们可以使用下面的拆分创建自己的日期格式化程序
Select date.split('-')[2]||'-'||case when length(date.split('-')[0]) = 1 then '0'||date.split('-')[0] else date.split('-')[0] end || case when length(date.split('-')[1]) = 1 then '0'||date.split('-')[1] else date.split('-')[1] end]
日期 = date_column
日期格式yyyy-mm-dd
分隔符可以不同。
不使用任何日期格式函数
【讨论】:
以上是关于在 pyspark 问题中转换 24 小时日期格式的主要内容,如果未能解决你的问题,请参考以下文章
如何将 12 或 24 小时时间格式的日期转换为“互联网”日期?
swift - 如何将日期从上午/下午转换为 24 小时格式