将 unix_timestamp 转换为 spark 中的普通时间戳(以秒为单位)
Posted
技术标签:
【中文标题】将 unix_timestamp 转换为 spark 中的普通时间戳(以秒为单位)【英文标题】:convert a unix_timestamp to normal timestamp(with seconds) in spark 【发布时间】:2018-08-02 20:14:51 【问题描述】:df.schema
操作:
StructField(time,LongType,true)
代码:
df.registerTempTable("dfTbl")
dfNew= spark.sql("""
SELECT *, cast(time as Timestamp) as newTIMESTMP
FROM dfTbl d
""")
我得到了输出,但值很奇怪。
例如:
50505-01-01
对可能出现的错误有什么建议吗?
【问题讨论】:
正常时间戳是什么意思?是否要将其格式化为字符串? @Psidom nope, '格式:2018-01-01 12:00:444.0'unix_timestamp
是以秒为单位的整数。你不能通过转换给它加上几分之一秒吗?
你确定吗?正如我从docs 看到的,unix 时间戳将时间存储为秒数。
我尝试了您的代码,它按预期工作。您可以发布您正在尝试的示例数据吗?
【参考方案1】:
基于这个问题,OP 在 epoch 中有时间字段。因此,在执行查询之前应该将其转换为秒数。
df.registerTempTable("dfTbl")
dfNew= spark.sql("""
SELECT *, cast(time/1000 as Timestamp) as newTIMESTMP
FROM dfTbl d
""")
【讨论】:
【参考方案2】:将您的 unixtimestamp 传递给以下函数
def unixtodate(utime):
import datetime
current=datetime.datetime(1970,01,01,00,00,00)+datetime.timedelta(seconds=utime)
return current
【讨论】:
以上是关于将 unix_timestamp 转换为 spark 中的普通时间戳(以秒为单位)的主要内容,如果未能解决你的问题,请参考以下文章