使用spark.jdbc加载时,更改默认时区会转换Oracle表中的时间

使用spark.jdbc加载时,更改默认时区会转换Oracle表中的时间,oracle,scala,apache-spark,jdbc,timestamp,Oracle,Scala,Apache Spark,Jdbc,Timestamp,我正在使用Spark 2.1.0、Scala 2.11.8和Oracle 12c,在将Spark数据帧加载到Oracle时,它转换时间,服务器上的时区是EDT,我正在将其更改为Asia/Kolkata,因为第一条记录中的日期在EDT中无效(DST在该特定时间启动)。下面是默认时区代码和数据帧 import java.util.TimeZone val tz= TimeZone.getTimeZone("Asia/Kolkata") TimeZone.setDefault(tz) //Creat

我正在使用Spark 2.1.0、Scala 2.11.8和Oracle 12c,在将Spark数据帧加载到Oracle时,它转换时间,服务器上的时区是EDT,我正在将其更改为Asia/Kolkata,因为第一条记录中的日期在EDT中无效(DST在该特定时间启动)。下面是默认时区代码和数据帧

import java.util.TimeZone
val tz= TimeZone.getTimeZone("Asia/Kolkata")
TimeZone.setDefault(tz)

//Create a DataFrame to Load Data
df3.show
+---+----------+--------------------+
| id| something|              dateee|
+---+----------+--------------------+
|  1|Date ---- |2017-03-12 02:02:...|
|  2|Date ---- |2017-02-12 02:02:...|
|  3|Date ---- |2017-01-12 02:02:...|
|  4|Date ---- |2017-08-01 11:21:...|
+---+----------+--------------------+
当我运行
df3.write.mode(“append”).jdbc(Url,“test\u timestamp”,dbProp)

加载到数据库中的数据是

1   Date ----   3/11/2017 3:32:00 PM
2   Date ----   2/11/2017 3:32:00 PM
3   Date ----   1/11/2017 3:32:00 PM
4   Date ----   8/1/2017 1:51:33 AM
表模式-

Name                                      Null?    Type                        
----------------------------------------- -------- ------------------------
id                                                 NUMBER(38)                  
something                                          VARCHAR2(100)               
dateee                                             DATE                        
我希望时间戳以数据帧的形式加载。
如果我不使用
java.util.TimeZone
并将另一个时区设置为默认时区,则不会发生这种情况。

DATE
数据类型不支持任何时区信息。如果您输入带有时区的日期/时间,Oracle将简单地截断时区信息。您所说的“服务器上的时区是EDT”是什么意思。您是指数据库操作系统时区还是
DBTIMEZONE
?什么是“EDT”?通过
从V$TIMEZONE_名称中选择TZNAME、TZABBREV、tzu偏移量(TZNAME),其中TZABBREV='EDT'我知道日期数据类型不支持任何时区,这就是为什么这很复杂。我通过spark submit运行我的jar,spark在unix box上配置,其时区为EDT(美国/东部,DST打开)。DB时区设置为UTC。相关:
DATE
数据类型不支持任何时区信息。如果您输入带有时区的日期/时间,Oracle将简单地截断时区信息。您所说的“服务器上的时区是EDT”是什么意思。您是指数据库操作系统时区还是
DBTIMEZONE
?什么是“EDT”?通过
从V$TIMEZONE_名称中选择TZNAME、TZABBREV、tzu偏移量(TZNAME),其中TZABBREV='EDT'我知道日期数据类型不支持任何时区,这就是为什么这很复杂。我通过spark submit运行我的jar,spark在unix box上配置,其时区为EDT(美国/东部,DST打开)。DB时区设置为UTC。相关: