为什么在写入Hive表期间更改了Spark数据帧中的时间戳列?

我试图使用JDBC读取Oracle表并将数据插入到Hive表中,但是所有timestamp列的值均已更改(-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,并希望有人已经遇到了此类问题?

daibin0715 回答:为什么在写入Hive表期间更改了Spark数据帧中的时间戳列?

我想您在Spark中的TIMESTAMP列是DateType。仅在将时间戳记格式设置为字符串时,将配置“ spark.sql.session.timeZone”设置为“ UTC”才有一些效果,但是日期将保存在Date对象中,而时区无关紧要。

如果要再次以UTC身​​份访问它,则可以获取时间戳并将其转换,或使用“ spark.sql.session.timeZone”更改默认时间戳时区。

本文链接:https://www.f2er.com/3138950.html

大家都在问