Как измерить метку времени в миллисекундах в Scala? - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть датафрейм со списком столбцов; один из столбцов - это 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, не знаю, с чего начать.

Есть предложения?

1 Ответ

0 голосов
/ 07 сентября 2018

Один из подходов заключается в том, чтобы сначала преобразовать 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|
// +-----------+------------------------+----------------------+
...