Как преобразовать столбец string (столбец, который содержит только время, а не дату) в time_stamp в spark-scala?

#scala #apache-spark

#scala #apache-spark

Вопрос:

Мне нужно преобразовать столбец, который содержит только время в виде строки, в тип метки времени или любую другую функцию времени, которая доступна в spark.

Ниже приведен фрейм тестовых данных, который имеет «Time_eg» в качестве столбца string,

 Time_eg
12:49:09 AM
12:50:18 AM
  

Схема перед преобразованием во время,

Time_eg: строка (обнуляемый = true)

 //Converting to time stamp
val transType= test.withColumn("Time_eg", test("Time_eg").cast("timestamp"))
  

Схема После преобразования в timestamp схема будет

Time_eg: временная метка (значение null = true)

Но вывод transType.show() дает нулевое значение для столбца «Time_eg».

Пожалуйста, дайте мне знать, как преобразовать столбец, который содержит только время в виде строки, в метку времени в spark scala?

Очень признателен, если кто-нибудь может помочь в этом?

Спасибо

Ответ №1:

Вам нужно использовать специальную функцию для преобразования строки во временную метку и указать формат. Кроме того, временная метка в Spark представляет полную дату (со временем суток). Если вы не укажете дату, она будет установлена на 1970, 1 января, начало временных меток unix.

В вашем случае вы можете преобразовать свои строки следующим образом:

 Seq("12:49:09 AM", "09:00:00 PM")
    .toDF("Time_eg")
    .select(to_timestamp('Time_eg, "hh:mm:ss aa") as "ts")
    .show
 ------------------- 
|                 ts|
 ------------------- 
|1970-01-01 00:49:09|
|1970-01-01 21:00:00|
 ------------------- 
  

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

1. ПРИВЕТ, Оли.. Спасибо за ваш повтор. Однако, как я упоминал, мне нужно получить столбец «Time_eg»» с приведенными ниже значениями только «time»: 12:49: 09 AM 12:50:18 AM

2. Причина в том, что мне нужно выполнить некоторую операцию на основе этого времени без учета даты. Итак, что я спрашиваю, есть ли какая-либо другая функция, доступная в spark для преобразования строки во время?

3. Не могли бы вы рассказать мне, что вы пытаетесь сделать?

4. Привет, Оли, я пытаюсь добиться приведенного ниже варианта использования: Количество транзакций, выполненных пользователем за час, согласно приведенному ниже набору данных Customer Transaction_time Cust1 12:49: 09 AM Cust1 12: 50: 18 AM Cust1 12: 20: 12 am В приведенном выше случае предположим, что у меня есть только время без даты, итак, какой лучший способ добиться этого?