【发布时间】:2023-03-15 06:52:01
【问题描述】:
我有一堆带有时间戳列的记录,字符串形式如下所示:
+---------------------+
| raw |
+---------------------+
| 2019-07-14 00:00:00 |
| 2019-07-04 00:00:00 |
| 2019-01-26 00:00:00 |
+---------------------+
如果我使用.withColumn("timestamp", to_timestamp(Col("raw"))),并使用STRING, TIMESTAMP 模式写入配置单元,那么我们会看到:
+---------------------+---------------------+
| raw | timestamp |
+---------------------+---------------------+
| 2019-07-14 00:00:00 | 2019-07-14 00:00:00 |
| 2019-07-04 00:00:00 | 2019-07-04 00:00:00 |
| 2019-01-26 00:00:00 | 2019-01-26 00:00:00 |
+---------------------+---------------------+
但是我们想要指定源时区的选项,所以如果我们将 to_timestamp 替换为 to_utc_timestamp (如.withColumn("timestamp", to_utc_timestamp(Col("raw"), "America/New_York"))),那么我们会得到一个这样的表,有 5 小时的差异:
+---------------------+---------------------+
| raw | timestamp |
+---------------------+---------------------+
| 2019-07-14 00:00:00 | 2019-07-14 05:00:00 |
| 2019-07-04 00:00:00 | 2019-07-04 05:00:00 |
| 2019-01-26 00:00:00 | 2019-01-26 05:00:00 |
+---------------------+---------------------+
但是有数据的服务器和hive服务器在东部时区,所以我们不应该看到0小时差的时间戳吗?
我的问题是,如何将时间戳从字符串加载到具有特定时区的配置单元,并让它在配置单元中正确显示?
【问题讨论】:
-
这能回答你的问题吗? Local Time Convert To UTC Time In Hive
-
不是真的,你具体指的是什么?
-
我指的是
to_utc_timestamp将给定时区中的时间戳转换为UTC。因此,如果您说您的时间戳在“America/New_York”,那么 +5 小时就是它在 UTC 中的时间。
标签: scala apache-spark hive