unix_timestamp会截断还是舍入毫秒?

Ale*_*lex 2 pyspark

参考

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

我发现这使DataFrame时间戳列减少了毫秒。我只是想知道是将其截断还是将时间戳四舍五入到最接近的秒数。

Psi*_*dom 5

没有文档备份,但是在@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     |
+-----------------------+--------------+-------+
Run Code Online (Sandbox Code Playgroud)