使用scala将时间戳更改为spark中的UTC格式

时间:2018-06-11 09:49:21

标签: scala apache-spark utc timestamp-with-timezone

问题与问题类似:Change the timestamp to UTC format in Pyspark

基本上,它使用 scala 将时间戳字符串格式ISO8601转换为UTC时间戳字符串(2017-08-01T14:30:00+05:30 - > 2017-08-01T09:00:00+00:00)。

我是scala / java的新手,我检查了火花库,他们没有办法转换而不知道时区,我不知道时区,除非(我以丑陋的方式解析或使用java / scala lib?)有人可以帮忙吗?

更新:更好的方法:在spark中设置时区会话,并使用df.cast(DataTypes.TimestampType)进行时区转换

2 个答案:

答案 0 :(得分:1)

您可以使用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

答案 1 :(得分:0)

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'。