我正在尝试使用spark sql查询oracle db表。有一个column(RESERVATION.START_DATE)
,其数据类型为timestamp
,当我运行查询时,出现错误unsupported type -101
。如果我将列转换/转换为字符串/ varchar或日期类型,则会在DataFrame中获得null
个条目。
我尝试使用to_char
,to_date
的强制转换函数将时间戳记值转换为字符串或日期,如果我在DBConsole中手动运行查询,我会得到正确的结果,但是如果运行它通过使用spark-sql
的Scala程序,我得到了不受支持的类型错误,或者如果我将列强制转换为字符串/日期,则在DataFrame中得到了空值。
仅使用oracle DBConsole运行时,这两个查询都给出正确的结果而没有错误。 但是,如果在Scala i中使用spark-sql运行相同的查询,则会出现错误
SELECT to_char(RESERVATION.START_DATE, 'DD-MM-YY HH:MI:SS.FFFFFF TZH:TZM') as SDATE
FROM RESERVATION
SELECT RESERVATION.START_DATE,
FROM RESERVATION
第一个查询的结果显示为(仅关注前三个值。第三个值是START_DATE列)
[null]
[null],
[空]
第二个查询的错误结果是:
Exception in thread "main" java.sql.SQLException: Unsupported type -101
at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$.org$apache$spark$sql$execution$datasources$jdbc$JdbcUtils$$getCatalystType(JdbcUtils.scala:209)
at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$5.apply(JdbcUtils.scala:246)
at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$5.apply(JdbcUtils.scala:246)
at scala.Option.getOrElse(Option.scala:121)
at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$.getSchema(JdbcUtils.scala:245)
at org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:64)
at org.apache.spark.sql.execution.datasources.jdbc.JDBCRelation.<init>(JDBCRelation.scala:113)
at org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation(JdbcRelationProvider.scala:45)
at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:330)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:152)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:125)