scala - 为什么在写入 Hive 表期间 Spark 数据框中的时间戳列发生了变化?
问题描述
我正在尝试使用 JDBC 读取 Oracle 表并将数据插入 Hive 表,但所有时间戳列的值都已更改(-6 小时)。为什么它会更改时间戳?
我尝试使用“spark.sql.session.timeZone”、“UTC”来触发配置,但没有帮助
val spark: SparkSession = SparkSession
.builder
.config(sparkConf)
.config("spark.sql.session.timeZone", "UTC")
.enableHiveSupport()
.getOrCreate()
val dataDF = spark.read.format("jdbc")
.option("driver", "oracle.jdbc.OracleDriver")
.option("url", s"jdbc:oracle:thin:@//${configuration("dwh_address")}")
.option("user", configuration("dwh_username"))
.option("password", configuration("dwh_password"))
.option("dbtable", s"(${select * from source_table})")
.option("fetchSize", configuration("fetch_size"))
.load()
dataDF.coalesce(1).write.mode("append").insertInto("target_table")
这是表中源行的样子:
ID DATE
1509808, 2019-11-04 00:00:00.0
这是插入后 Hive 表的样子:
ID DATE
1509808, 2019-11-03 18:00:00.0
我不知道为什么所有 TIMESTAMP 列都更改为 - 6 HOURS 并希望有人已经面临这样的问题?
解决方案
对于这个问题,请检查您的源时间戳是否在哪个时区。因此,您可以使用下面的方法覆盖时区,它将时间转换回您的原始时间戳
如果您的源时间戳在 MST 中,则使用以下内容:
--conf spark.sql.session.timeZone=MST
推荐阅读
- c++ - 在 C++ 中合并虚拟继承和实现继承
- javascript - 如果分块数组的最后一个块不能被平均分割,则将空字符串添加到最后一个块中
- python-3.x - Discord.py ffmpeg 我已正确设置所有内容,即下载和播放文件,我需要帮助更改已安装文件的目录,代码如下:
- java - 如何从集合中删除和添加值
- php - 如何将用于工具的小型 PHP 脚本安装到现有网站的页面中?
- javascript - 制作一个禁止不和谐的 CS:GO 地图在多个文本通道中同步运行
- django - 错误:请求失败,在 axios post api 中出现代码 403
- sql - 选择 ValueA 其中 [count(ValueB) > 2 并且计数的行共享 ValueC]
- javascript - 如何将一些动态元素注入到带有 chrome 扩展的网页中?
- java - Spring Boot 应用程序如何处理多个并发请求?