如何删除时间戳火花sql中的毫秒数

Posted

技术标签:

【中文标题】如何删除时间戳火花sql中的毫秒数【英文标题】:How to remove milliseconds in timestamp spark sql 【发布时间】:2017-09-21 20:01:55 【问题描述】:

我想在通过 spark sql 选择列时去掉毫秒部分。

例如:2012-10-17 13:02:50.320

我希望结果为 2012-10-17 13:02:50 我试过了

spark.sql("select cast(datecol as timestamp) from table 
spark.sql("select unix_timestamp(datecol,"yyyy-MM-dd HH:mm:ss") from table

似乎两者都不起作用,子字符串有效,但我需要时间戳格式,还有其他方法吗?

提前致谢

【问题讨论】:

【参考方案1】:

由于您的时间戳值是字符串并且您将其转换为时间戳,您可以使用 substring 函数尝试它。

第二个选项:

spark.sql("select from_unixtime(unix_timestamp(datecol, 'yyyy-MM-dd HH:mm:ss.SSS'),'yyyy-MM-dd HH:mm:ss') from table")

您没有提供输入格式,这可能是您收到错误的原因。

我希望,这会奏效。

谢谢, 手动

【讨论】:

【参考方案2】:

解决方法是使用to_timestamp 函数 如果要将值移动到新列

df = df.withColumn("New Column", to_timestamp("DateTimeCol", 'yyyy-MM-dd HH:mm:ss'))

【讨论】:

【参考方案3】:

对于所有正在寻找使用 spark DataFrame 方法的解决方案的人: 如果您的列是 Timestamp 类型而不是 String,您可以使用 date_trunc("second", column) 函数:

// remove milliseconds of datetime column
val df2 = df.withColumn("datetime", date_trunc("second", col("datetime")))

【讨论】:

以上是关于如何删除时间戳火花sql中的毫秒数的主要内容,如果未能解决你的问题,请参考以下文章

根据时间戳差异删除行 - 火花

SQL TIMESTAMP DEFAULT CURRENT TIMESTAMP:如何删除毫秒?

mysql如何用sql语句将时间戳转化为正常时间精确到毫秒

从时间戳中丢弃毫秒部分

如何删除时间戳中的 freq='W-FRI' 部分

具有毫秒精度的时间戳:如何将它们保存在 MySQL 中