【问题标题】:change the timestamp to UTC format in spark using scala使用scala将时间戳更改为spark中的UTC格式
【发布时间】:2018-06-11 09:49:20
【问题描述】:

问题与问题有点相似: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 的新手,我检查了 spark 库,他们在不知道时区的情况下无法转换,我不知道时区,除非(我以丑陋的方式解析它或使用 java/ scala lib?)有人可以帮忙吗?

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

【问题讨论】:

  • 您能否说明输入和预期格式,并更新您尝试过的内容

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


【解决方案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

【讨论】:

  • 嗨先生,我有同样的问题,但我在数据框中有一个时间戳列?如何在列中进行相同的转换
  • @experiment,我也有同样的问题,请参阅stackoverflow.com/questions/50182370/…
【解决方案2】:

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

【讨论】:

  • 字符串中没有明确的时区,而to_utc_timestamp 需要事先知道时区。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-29
  • 2014-11-18
  • 2020-04-03
  • 1970-01-01
  • 1970-01-01
  • 2015-06-14
相关资源
最近更新 更多