在 sparklyr 中将 12 小时制转换为 24 小时制
Posted
技术标签:
【中文标题】在 sparklyr 中将 12 小时制转换为 24 小时制【英文标题】:convert 12 hour clock to 24 hour time in sparklyr 【发布时间】:2021-10-14 06:39:49 【问题描述】:我正在尝试使用 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 可能会导致不同的结果:失败 在新解析器中解析“2021-05-18 9:00:00 PM”。你可以设置 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 可能会导致不同的结果:失败 在新解析器中解析“2021-05-18 9:00:00 PM”。你可以设置 spark.sql.legacy.timeParserPolicy 到 LEGACY 以恢复行为 在 Spark 3.0 之前,或设置为 CORRECTED 并将其视为无效 日期时间字符串。引起:DateTimeParseException:文本'2021-05-18 9:00:00 PM' 无法在索引 11 处解析
【问题讨论】:
【参考方案1】:您可以将 spark.sql.legacy.timeParserPolicy 设置为 LEGACY,如下所示:
spark.conf.set("spark.sql.legacy.timeParserPolicy","LEGACY")
在此之后,您在解析日期时间时应该不会收到错误。
由于 spark v3.0 (Read here) 中有一些与日期时间解析器相关的更改,因此您会收到该错误。
读取日期时间模式here。据此,您可以使用模式“a”进行 PM 或 AM 解析。
to_date("datetime_12", "yyyy-MM-dd hh:mm:ss a")
【讨论】:
谢谢,这可行,但您知道新 spark 3.0 的正确规范是什么吗? 已更新答案,请查收。以上是关于在 sparklyr 中将 12 小时制转换为 24 小时制的主要内容,如果未能解决你的问题,请参考以下文章