Какой самый короткий и самый эффективный способ в Spark SQL преобразовать столбец Timestamp
в метку времени в миллисекундах Long
столбец?
Вот пример преобразования метки времени в миллисекунды
scala> val ts = spark.sql("SELECT now() as ts")
ts: org.apache.spark.sql.DataFrame = [ts: timestamp]
scala> ts.show(false)
+-----------------------+
|ts |
+-----------------------+
|2019-06-18 12:32:02.41 |
+-----------------------+
scala> val tss = ts.selectExpr(
| "ts",
| "BIGINT(ts) as seconds_ts",
| "BIGINT(ts) * 1000 + BIGINT(date_format(ts, 'S')) as millis_ts"
| )
tss: org.apache.spark.sql.DataFrame = [ts: timestamp, seconds_ts: bigint ... 1 more field]
scala> tss.show(false)
+----------------------+----------+-------------+
|ts |seconds_ts|millis_ts |
+----------------------+----------+-------------+
|2019-06-18 12:32:02.41|1560861122|1560861122410|
+----------------------+----------+-------------+
Как видите, самый простой способ получить миллисекунды из отметки времени не работает - приведение к длинным возвращаемым секундам, однако информация в миллисекундах во временной отметке сохраняется.
Единственный способ извлечения информации в миллисекундах - использование функции date_format
, которая не так проста, как я ожидал.
Кто-нибудь знает способ получить миллисекундное время UNIX из Timestamp
столбца проще, чем это?