繁体   English   中英

Pyspark:将 bigint 转换为微秒时间戳

[英]Pyspark: Convert bigint to timestamp with microseconds

我想将bigint unix 时间戳转换为以下datetime时间格式"yyyy-MM-dd HH:mm:ss:SSSSSS"以包括微秒。 当我使用标准日期时间函数时,我得到以下信息

spark.sql("select to_timestamp(1605509165022529) as ts").show(truncate=False)

结果

+----------------------------+
|ts                          |
+----------------------------+
|22327-10-26 13:09:588.009408|
+----------------------------+

这个datetime时间是错误的。 日期应为 2020-11-16,时间应为HH:mm:ss:SSSSSS

我怎样才能得到这个?

将您的时间戳除以 1e6,因为to_timestamp需要 unix 时间戳,以秒为单位,而不是微秒。

spark.sql("select to_timestamp(1605509165022529/1e6) as ts").show(truncate=False)

+--------------------------+
|ts                        |
+--------------------------+
|2020-11-16 06:46:05.022529|
+--------------------------+

这将使您可以直接从unix_micros BigInt转换为micros timestamp 遗憾的是,您不能直接使用F.timestamp_micros()调用它,但您可以将它作为 SQL 表达式传递。

为了以防万一,这是使用F.的方法:

import pyspark.sql.functions as F
 
sdf = sdf.withColumn('end_time', F.expr(f"timestamp_micros({'end_time'})"))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM