如何删除timestamp spark sql中的毫秒数

时间:2017-09-21 20:01:56

标签: hive apache-spark-sql

我希望在通过spark sql选择列时删除毫秒部分。

Ex: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

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

提前致谢

3 个答案:

答案 0 :(得分:2)

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

第二个选项:

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

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

我希望,这会奏效。

谢谢, 马努

答案 1 :(得分:0)

一种解决方法是使用t_timestamp函数 如果要将值移到新列

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

答案 2 :(得分:0)

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

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