#python #r #apache-spark #pyspark #sparklyr
Вопрос:
Я пытаюсь преобразовать следующее в 24-часовое время с помощью sparklyr:
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"))
И то, и другое приводит к нулю.
Я попробовал следующее в качестве отправной точки и получил эту ошибку
data %>%
mutate(datetime_24 = unix_timestamp(datetime_12, "yyyy-MM-dd hh:mm:ss"))
Вы можете получить другой результат из-за обновления Spark 3.0: Не удалось
проанализировать «2021-05-18 9:00:00 вечера» в новом анализаторе. Вы можете установить
spark.sql.legacy.timeParserPolicy в значение LEGACY, чтобы восстановить поведение
до Spark 3.0, или установить значение ИСПРАВЛЕНО и рассматривать его как недопустимую
строку даты и времени.
Я также попробовал следующее в 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 вечера» в новом анализаторе. Вы можете установить spark.sql.legacy.timeParserPolicy в значение LEGACY, чтобы восстановить поведение до Spark 3.0, или установить значение ИСПРАВЛЕНО и рассматривать его как недопустимую строку даты и времени. Вызвано: Исключение DateTimeParseException: Текст ‘2021-05-18 9:00:00 вечера’ не удалось проанализировать по индексу 11
Ответ №1:
Вы можете установить 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")
Комментарии:
1. Спасибо, это работает, но знаете ли вы, какова правильная спецификация для новой spark 3.0?
2. Обновил ответ, пожалуйста, проверьте.