我在蜂巢表中有以下格式的数据。
2019-11-21 18:19:15.817
我编写了如下的sql查询,以将上述列值转换为纪元格式。
val newDF = spark.sql(f"""select TRIM(id) as ID, unix_timestamp(sig_ts) as SIG_TS from table""")
我得到的输出列SIG_TS为1574360296
,没有毫秒。
如何获取以毫秒为单位的日期的时间戳?
答案 0 :(得分:0)
简单方法:创建一个UDF,因为spark的内置函数会在几秒钟内被截断。
val fullTimestampUDF = udf{t: Timestamp => t.getTime}
val df = Seq("2019-11-21 18:19:15.817").toDF("sig_ts")
.withColumn("sig_ts_ut", unix_timestamp($"sig_ts"))
.withColumn("sig_ts_ut_long", fullTimestampUDF($"sig_ts"))
df.show(false)
+-----------------------+----------+--------------+
|sig_ts |sig_ts_ut |sig_ts_ut_long|
+-----------------------+----------+--------------+
|2019-11-21 18:19:15.817|1574356755|1574356755817 |
+-----------------------+----------+--------------+