scala - Spark 中毫秒格式的正确时间戳
问题描述
在 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|
+--------------------------+----+
解决方案
曾经有过这样的问题。通过降低毫秒的精度来解决它。不理想但有效。
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)
)
推荐阅读
- php - authentification facebook : Invalid App ID 提供的 App ID 似乎无效
- python - Python 尝试/最终使用 sys.exc_info()
- microsoft-graph-api - Microsoft Graph 中的 Bookings API - OptOutOfCustomerEmail = true 会导致发送确认电子邮件
- sql - 如何根据另一个表从一个表中获取数据?
- node.js - 使用 npm-registry-client 发布包时出错
- amazon-eks - AWS ALB 504 网关超时错误 - EKS 工作节点、SpringBoot API
- python - 查找 google 共享驱动器文件夹 ID
- nasm - 来自 NASM 的 %line 指令等效于 MASM
- flutter - 具有重复键形式的 Dart Http POST
- c++ - C ++:为字符串赋值时出现问题(摘要不可用......)