将spark数据帧中的日期时间戳转换为epocTimestamp



我有一个镶木地板文件,其中TimeStamp列的格式为2020-07-07 18:30:14.500000+00:00,由Panda编写。当我在spark中读取同一个镶木地板文件时,它被读取为2020-07-08 00:00:14.5

我想把它转换成以毫秒为单位的历元时间戳,这就是1594146614500

我尝试过使用java日期时间格式

val dtformat = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")
dtformat.parse(r2.getAs[Long]("date_time").toString).getTime

它;s正在转换,但值错误(1594146614005(,而不是1594146614500。

为了使它正确,我必须添加dtformat.parse(r2.getAs[Long]("date_time").toString+"00").getTime。还有比这更干净的方法吗?

spark中有任何可用的函数可以将其读取为毫秒?

更新1:

使用以下答案后:

df.withColumn("时间戳",to_timestamp($"date_time","yyyy-MM-dd HH:MM:ss.SSSS XXX"(1000(.cast("bigint"((.show((

+-------------+--------------------+-------------------+-------------+
|expected_time|       original_time|          timestamp|        epoch|
+-------------+--------------------+-------------------+-------------+
|1597763904500|2020-08-18 20:48:...|2020-08-18 20:48:24|1597763904000|
|1597763905000| 2020-08-18 20:48:25|2020-08-18 20:48:25|1597763905000|
|1597763905500|2020-08-18 20:48:...|2020-08-18 20:48:25|1597763905000|

缺点是假设数据粒度为500ms,那么每个时间戳都有两个相同的epoc时间戳,这是不期望的。

我建议您从java.util和相应的格式API(java.text.SimpleDateFormat(中的过时的错误生产日期/时间API切换到java.time和相应的格式化API(java.time.format(中的现代日期/时间API。从跟踪:日期时间了解有关现代日期时间API的更多信息

import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
OffsetDateTime odt = OffsetDateTime.parse("2020-07-07 18:30:14.500000+00:00",
DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss.SSSSSSZZZZZ"));
System.out.println(odt.toInstant().toEpochMilli());
}
}

输出:

1594146614500

通过spark数据帧功能,

df.withColumn("timestamp", to_timestamp($"time", "yyyy-MM-dd HH:mm:ss.SSSSSSXXX"))
.withColumn("epoch", ($"timestamp".cast("decimal(20, 10)") * 1000).cast("bigint"))
.show(false)
+--------------------------------+---------------------+-------------+
|time                            |timestamp            |epoch        |
+--------------------------------+---------------------+-------------+
|2020-07-07 18:30:14.500000+00:00|2020-07-07 18:30:14.5|1594146614500|
+--------------------------------+---------------------+-------------+

这也是一种可行的方法。

相关内容

  • 没有找到相关文章

最新更新