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