[英]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.