将 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 中的普通时间戳(以秒为单位)的主要内容,如果未能解决你的问题,请参考以下文章

unix_timestamp 和强制转换为时间戳之间的区别

hive6:字符串和日期的转换常用函数

Hive表日期列值转换

hive时间差

Hive unix_timestamp 函数计算不匹配

将 ZULU 时间转换为 PST