如何将以毫秒为单位的DateTime转换为以毫秒为单位的纪元时间

时间:2019-11-25 15:55:05

标签: scala dataframe apache-spark apache-spark-sql

我在蜂巢表中有以下格式的数据。

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,没有毫秒。

如何获取以毫秒为单位的日期的时间戳?

1 个答案:

答案 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 |
+-----------------------+----------+--------------+