python - 在 sparklyr 中将 12 小时制转换为 24 小时制
问题描述
我正在尝试使用 sparklyr 将以下内容转换为 24 小时时间:
2021-05-18 9:00:00 PM
我的预期结果:2021-05-18 21:00:00
我努力了:
data %>%
mutate(datetime_24 = to_timestamp("datetime_12", "yyyy-MM-dd hh:mm:ss"))
data %>%
mutate(datetime_24 = to_date("datetime_12", "yyyy-MM-dd hh:mm:ss"))
两者都导致 NULL。
我尝试以下作为起点并收到此错误
data %>%
mutate(datetime_24 = unix_timestamp(datetime_12, "yyyy-MM-dd hh:mm:ss"))
由于 Spark 3.0 的升级,您可能会得到不同的结果:Fail to parse '2021-05-18 9:00:00 PM' in the new parser。您可以将 spark.sql.legacy.timeParserPolicy 设置为 LEGACY 以恢复 Spark 3.0 之前的行为,或者设置为 CORRECTED 并将其视为无效的日期时间字符串。
我还在 pyspark 中尝试了以下操作,但遇到了类似的错误:
from pyspark.sql.functions import from_unixtime, unix_timestamp, col
df_time = spark.table("data")
df_time_new = df_time.withColumn('datetime_24', \
from_unixtime(unix_timestamp(col(('datetime_12')), "yyyy-mm-dd hh:mm:ss"), "yyyy-mm-dd HH:mm:ss"))
错误:
由于 Spark 3.0 的升级,您可能会得到不同的结果:Fail to parse '2021-05-18 9:00:00 PM' in the new parser。您可以将 spark.sql.legacy.timeParserPolicy 设置为 LEGACY 以恢复 Spark 3.0 之前的行为,或者设置为 CORRECTED 并将其视为无效的日期时间字符串。原因:DateTimeParseException:无法在索引 11 处解析文本“2021-05-18 9:00:00 PM”
解决方案
您可以将 spark.sql.legacy.timeParserPolicy 设置为 LEGACY,如下所示:
spark.conf.set("spark.sql.legacy.timeParserPolicy","LEGACY")
在此之后,您在解析日期时间时不应出现错误。
由于 spark v3.0(阅读此处)中与日期时间解析器相关的一些更改,因此您会收到该错误。
在此处阅读日期时间模式。据此,您可以使用模式“a”进行 PM 或 AM 解析。
to_date("datetime_12", "yyyy-MM-dd hh:mm:ss a")
推荐阅读
- c++ - 'num1' 未在此范围内声明
- swift - 斯威夫特:如何查看今天之后的日期?
- java - play_again 方法不起作用,它应该在按钮按下时调用,但应用程序正在崩溃
- google-sheets - 将重复的列组反转为行
- google-chrome-extension - 如何在不创建扩展程序的情况下使用 chrome API
- c# - 从 HttpWebResponse 读取数据时遇到问题
- twitter-bootstrap - 标题和侧边栏之间出现间隙
- java - 编译java程序时出错
- machine-learning - 在逻辑回归中绘制决策边界
- java - Mapbox 样式规范 - Java 实现