изменить метку времени в формате UTC в искре с помощью scala

Вопрос похож на проблему: Измените метку времени на формат UTC в Pyspark

По сути, это преобразование формата строки метки времени ISO8601 со смещением в строку метки времени UTC (2017-08-01T14:30:00+05:30 -> 2017-08-01T09:00:00+00:00) с использованием scala.

Я как бы новичок в scala / java, я проверил библиотеку искр, которую у них нет возможности преобразовать, не зная часовой пояс, который у меня нет представления о часовом поясе, если (я не разбираю его уродливым способом или использую java / scala lib? ) Может кто поможет?

ОБНОВЛЕНИЕ: лучший способ сделать это: настроить сеанс часового пояса в Spark и использовать df.cast(DataTypes.TimestampType) для сдвига часового пояса


person ZhouQuan    schedule 11.06.2018    source источник
comment
можете ли вы уточнить ввод и ожидаемые форматы, а также обновить то, что вы пробовали   -  person Ramesh Maharjan    schedule 11.06.2018


Ответы (2)


Вы можете использовать примитивы java.time для анализа и преобразования вашей временной метки.

scala> import java.time.{OffsetDateTime, ZoneOffset}
import java.time.{OffsetDateTime, ZoneOffset}

scala> val datetime = "2017-08-01T14:30:00+05:30"
datetime: String = 2017-08-01T14:30:00+05:30

scala> OffsetDateTime.parse(datetime).withOffsetSameInstant(ZoneOffset.UTC)
res44: java.time.OffsetDateTime = 2017-08-01T09:00Z
person Jasper-M    schedule 11.06.2018
comment
привет, сэр, у меня такой же вопрос, но у меня есть столбец с меткой времени в фрейме данных? Как сделать такое же преобразование в столбце - person experiment; 09.10.2018
comment
@experiment, у меня был тот же вопрос, см. stackoverflow.com/questions/50182370/ - person Jeremy; 20.05.2019

_ 1_:

def to_utc_timestamp(ts: Column, tz: String): Column

Учитывая метку времени, например '2017-07-14 02: 40: 00.0', интерпретирует ее как время в данном часовом поясе и отображает это время как метку времени в формате UTC. Например, «GMT + 1» даст «2017-07-14 01: 40: 00.0».

person user9924540    schedule 11.06.2018
comment
У меня нет часового пояса прямо из строки, тогда как to_utc_timestamp нужно знать часовой пояс заранее. - person ZhouQuan; 11.06.2018