unix_timestamp是截断还是舍入毫秒?

时间:2017-10-30 03:25:04

标签: pyspark

来自reference

  

使用默认时区和默认语言环境,将给定模式的时间字符串(默认为'yyyy-MM-dd HH:mm:ss')转换为Unix时间戳(以秒为单位),如果失败则返回null。 / p>

我发现这会使DataFrame时间戳列的毫秒数减少。我只是想知道它是否只是截断,或将时间戳舍入到最接近的秒。

1 个答案:

答案 0 :(得分:4)

没有文档备份,但在@spark 2.2.0 ,它的截断,这是一个演示:

from pyspark.sql import Row
import pyspark.sql.functions as F
r = Row('datetime')
lst = [r('2017-10-29 10:20:30.102'), r('2017-10-29 10:20:30.999')]

df = spark.createDataFrame(lst)

(df.withColumn('trunc_datetime', F.unix_timestamp(F.col('datetime')))
   .withColumn('seconds', F.from_unixtime(F.col('trunc_datetime'), 'ss'))
   .show(2, False))

+-----------------------+--------------+-------+
|datetime               |trunc_datetime|seconds|
+-----------------------+--------------+-------+
|2017-10-29 10:20:30.102|1509286830    |30     |
|2017-10-29 10:20:30.999|1509286830    |30     |
+-----------------------+--------------+-------+