#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 В приведенном выше случае предположим, что у меня есть только время без даты, итак, какой лучший способ добиться этого?