Scala - Как преобразовать строку даты в метку времени в запросе Spark SQL? - PullRequest
0 голосов
/ 30 октября 2019

У меня есть строка formattedDataInputDateTime, которую я хочу вставить в таблицу в качестве типа метки времени в качестве второго поля.

// Returns 2019-10-30T13:00Z
val localDateTimeZoned = OffsetDateTime.of(java.time.LocalDate.parse(currentDate), java.time.LocalTime.now, ZoneOffset.UTC).truncatedTo(ChronoUnit.HOURS)

// Returns 2019-10-30T13:00:00.000+0000
val formattedDataInputDateTime: String = localDateTimeZoned.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSxx")).toString

Итак, я написал следующий запрос, но не могу понять, как вставить сюда отметку времени formattedDataInputDateTime?

spark.sql(
  s"""INSERT INTO main.basic_metrics
     |VALUES ('metric_name', ???,
     |'metric_type', current_timestamp, false)""".stripMargin)

Я пытался проверить этот подходно это привело к следующей ошибке:

val ts = cast(unix_timestamp("$formattedDataInputDateTime", "yyyy-MM-dd'T'HH:mm:ss.SSSxx") as timestamp)

type mismatch;
 found   : String("$formattedDataInputDateTime")
 required: org.apache.spark.sql.Column

Ответы [ 2 ]

0 голосов
/ 30 октября 2019

Вы передаете String вместо Column, вы можете обернуть его, используя lit:

cast(unix_timestamp(lit(formattedDataInputDateTime), "yyyy-MM-dd'T'HH:mm:ss.SSSxx")

Однако вы можете получить текущую дату и отформатировать ее с помощью sparkфункции current_date и date_format.

0 голосов
/ 30 октября 2019

val ts = cast(unix_timestamp("$formattedDataInputDateTime", "yyyy-MM-dd'T'HH:mm:ss.SSSxx") as timestamp)

type mismatch;
 found   : String("$formattedDataInputDateTime")
 required: org.apache.spark.sql.Column

Это в основном означает, что $ находится внутри строки в кавычках. Должен быть снаружи как $"formattedDataInputDateTime"

...