Unix时间到常规日期和时间格式使用pyspark

mfuanj7w  于 2023-05-16  发布在  Spark
关注(0)|答案(2)|浏览(145)

我有一些日志的unix时间数据,我想把它转换成常规的日期和时间
例如,我有 1683825723389,我得到 *+55328-04 - 24 * 或 +55328-04-24 15:36:29
我试过:

.withColumn("date", F.from_unixtime(F.col("unix_time_column"), "yyyyMMdd")

.withColumn("time", F.from_unixtime("unix_time_column"))

.withColumn("date", F.expr("from_unixtime(unix_time_column)")

.withColumn("date", F.col("unix_time_column").cast('date'))

但似乎什么都不管用
谢谢

rlcwz9us

rlcwz9us1#

正如Emma在评论中建议的那样,时间以毫秒为单位,只需除以1000

w3nuxt5m

w3nuxt5m2#

使用**SQL API:**
从**Spark-3.1.0+**开始的timestamp_millis() + date_format()函数

Example:

select date_format((timestamp_millis(1683825723389)),'yyyyMMdd') as dt
#output
#20230511
select (timestamp_millis(1683825723389)) as ts_millis
#2023-05-11T17:22:03.389+0000

另一种方法是使用dataframe API的timestamp_seconds函数。

df = spark.createDataFrame([(1683825723389,)],['ts_millis'])
df.show(10,False)
df.withColumn("dt_frmt", date_format(timestamp_seconds(col("ts_millis")/1000),"yyyyMMdd")).show(10,False)

#+-------------+
#|ts_millis    |
#+-------------+
#|1683825723389|
#+-------------+

#+-------------+--------+
#|ts_millis    |dt_frmt |
#+-------------+--------+
#|1683825723389|20230511|
#+-------------+--------+

相关问题