Ошибка при попытке добавить дату Java в качестве литерала в spark DataFrame

#scala #apache-spark #databricks

#scala #apache-spark #блоки данных

Вопрос:

Я определил такую переменную в моем блокноте Scala.

 import java.time.{LocalDate, LocalDateTime, ZoneId, ZoneOffset, Duration}
val fiscalYearStartDate = LocalDate.of(fiscalStartYear,7,1);
  

Я хотел бы добавить это в качестве столбца в мой фрейм данных.

 SomeDF.lit(fiscalYearStartDate ).cast("date").as("fiscalYearStartDate")
  

Это выдает ошибку.
java.lang.RuntimeException: неподдерживаемый класс типа литерала java.time.LocalDate 2020-10-01

Комментарии:

1. попробуйте ввести строку и привести ее как дату

2. @Lamanus , да, это сработало!!

Ответ №1:

Эквивалентным типом даты Spark SQL в Scala является java.sql.Date, и в результате решение может быть на:

 val finalDF = SomeDF.withColumn("fiscalYearStartDate", lit(fiscalYearStartDate.toString).cast("Date"))
  

или

 val finalDF = SomeDF.withColumn("fiscalYearStartDate", lit(fiscalYearStartDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")).cast("Date"))
  

или

 import java.sql.Date
val finalDF = SomeDF.withColumn("fiscalYearStartDate", lit(Date.valueOf(fiscalYearStartDate)))