【发布时间】:2019-06-18 12:40:01
【问题描述】:
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, 'SSS')) 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|
+----------------------+----------+-------------+
如您所见,从时间戳获取毫秒的最直接方法不起作用 - 转换为 long 返回秒,但时间戳中的毫秒信息被保留。
我发现提取毫秒信息的唯一方法是使用 date_format 函数,这并不像我想象的那么简单。
有人知道从Timestamp 列中获取毫秒UNIX 时间的方法比这更简单吗?
【问题讨论】:
标签: apache-spark apache-spark-sql