изменить метку времени в формате UTC в спарк с помощью Scala - PullRequest
0 голосов
/ 11 июня 2018

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

org.apache.spark.sql.functions.to_utc_timestamp:

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».

0 голосов
/ 11 июня 2018

Вы можете использовать примитивы 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
...