首页 > 解决方案 > 如何在Scala中将时间戳调整为毫秒?

问题描述

我有一个包含列列表的数据框;其中一列是具有不同长度的 key_time。我需要在第二部分将所有 key_time 长度保持为毫秒,例如:

原始 key_time 列:

  +--------------------+----------------------+
  |account_id          |key_time.             |
  +--------------------+----------------------+
  |9999999.            |2018-07-01 12:32:0424 |
  +--------------------+----------------------+

这就是我要的:

  +--------------------+------------------------+
  |account_id          |key_time.               |
  +--------------------+------------------------+
  |9999999.            |2018-07-01 12:32:042400 |
  +--------------------+----------------------==+

如果第二部分通过 6 位数,那么我需要将其减少到 6:

  +--------------------+------------------------+
  |account_id          |key_time.               |
  +--------------------+------------------------+
  |9999999.            |2018-07-01 12:32:123456 |
  +--------------------+----------------------==+

我可以df = df.withColumn("key_time", logic (here))吗?我是 Scala 新手,不知道从哪里开始。

有什么建议么?

标签: scalaapache-sparkapache-spark-sqlspark-streaming

解决方案


一种方法是首先通过将其转换key_time为有效的时间戳格式,regexp_extract然后将date_format其整形为所需的格式:

val df = Seq(
  (101, "2018-07-01 12:32:0424"),
  (102, "2018-07-01 12:32:123456")
).toDF("account_id ", "key_time")

val pattern = "(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2})(.*)"

df.
  withColumn("key_time_1", regexp_extract($"key_time", pattern, 1)).
  withColumn("key_time_2", regexp_extract($"key_time", pattern, 2)).
  withColumn("key_timestamp", concat($"key_time_1", lit("."), $"key_time_2")).
  withColumn("key_time", date_format($"key_timestamp", "yyyy-MM-dd HH:mm:ssSSS")).
  select("account_id ", "key_timestamp", "key_time").
  show(false)

// +-----------+------------------------+----------------------+
// |account_id |key_timestamp           |key_time              |
// +-----------+------------------------+----------------------+
// |101        |2018-07-01 12:32:04.24  |2018-07-01 12:32:04240|
// |102        |2018-07-01 12:32:12.3456|2018-07-01 12:32:12345|
// +-----------+------------------------+----------------------+

推荐阅读