在Spark2中定义包含毫秒的时间戳的正确格式是什么?
val a = "2019-06-12 00:03:37.981005"
to_timestamp(a, "yyyy-MM-dd HH:mm:ss") // 2019-06-12 00:03:37
to_timestamp(a, "yyyy-MM-dd HH:mm:ss.FF6") // null
to_timestamp(a, "yyyy-MM-dd HH:mm:ss.FFFFFF") // null
这就是我想要做的:
df.withColumn("aa", to_timestamp($"a", "yyyy-MM-dd HH:mm:ss.SSSSSS")).show(false)
+--------------------------+----+
|a |aa |
+--------------------------+----+
|2019-06-12 00:03:37.981005|null|
+--------------------------+----+
答案 0 :(得分:1)
曾经有过这个问题。通过降低ms的精度来解决。不太理想,但是可行。
df.withColumn("tmp", substring($"a",1,23)).withColumn("res", to_timestamp($"tmp", "yyyy-MM-dd HH:mm:ss.SSS")).show()
编辑
OP指出上一行只是删除ms。试试看:
import org.apache.spark.sql.types.TimestampType
df.withColumn("tmp", substring($"a",1,23))
.withColumn("res", (
unix_timestamp($"tmp", "yyyy-MM-dd HH:mm:ss.SSS") +
substring($"a", -6, 6).cast("float")/1000000
).cast(TimestampType)
)
答案 1 :(得分:0)