display() 没有正确显示微秒

问题

想要显示一个精度为微秒的时间戳值,但当使用 display() 时,它没有显示毫秒后的值。

例如,此 Apache Spark SQL display() 命令:

display(spark.sql("select cast('2021-08-10T09:08:56.740436' as timestamp) as test"))

返回一个截断的值:

2021-08-10T09:08:56.740+0000

原因

在呈现输出之前,DataFrame 会在内部转换为 HTML。

这会将显示的结果的精度限制为毫秒。

它不会影响存储的值。

解决方案

应改用 show()而不是 display()

例如,此 Apache Spark SQL show() 命令:

spark.sql("select cast('2021-08-10T09:08:56.740436' as timestamp) as test").show(truncate=False)

返回正确的值:

2021-08-10 09:08:56.740436

或者,可以再创建一个列,将值作为字符串复制到该列。

转换为字符串后,display() 将显示完整的值。