使用Spark从teradata表读取数据时出现ExceptionInInitializer错误



我使用以下代码从teradata读取数据,但得到错误

val jdbcDF = spark.read
.format("jdbc")
.option("url",s"jdbc:teradata://${TeradataDBHost}/database=${TeradataDBDatabase}")
.option("dbtable", TeradataDBDatabase+"."+TeradataDBTable)
.option("driver","com.teradata.jdbc.TeraDriver")
.option("user", TeradataDBUsername)
.option("password", TeradataDBPassword)
.load()

错误堆栈跟踪

Exception in thread "main" java.lang.ExceptionInInitializerError
at com.teradata.jdbc.jdbc.GenericTeraEncrypt.getGSSM(GenericTeraEncrypt.java:577)
at com.teradata.jdbc.jdbc.GenericTeraEncrypt.<init>(GenericTeraEncrypt.java:116)
at com.teradata.jdbc.jdbc.GenericTeradataConnection.<init>(GenericTeradataConnection.java:107)
at com.teradata.jdbc.jdbc_4.TDSession.<init>(TDSession.java:186)
at com.teradata.jdbc.jdk6.JDK6_SQL_Connection.<init>(JDK6_SQL_Connection.java:36)
at com.teradata.jdbc.jdk6.JDK6ConnectionFactory.constructSQLConnection(JDK6ConnectionFactory.java:25)
Caused by: java.lang.NullPointerException
at com.teradata.tdgss.jtdgss.TdgssConfigApi.GetMechanisms(Unknown Source)
at com.teradata.tdgss.jtdgss.TdgssManager.<init>(Unknown Source)
at com.teradata.tdgss.jtdgss.TdgssManager.<clinit>(Unknown Source)

来自Teradata JDBC驱动程序文档:

如果您收到以下异常之一:

  • com.teradata.tdgss.jtdgss.TdgssConfigApi.GetMechanisms上的NullPointerException
  • 在com.teradata.tdgss.jtdgss.TdgssParseXml.parse的javax.xml.parsers.DocumentBuilder.parse中出现IllegalArgumentException"InputStream不能为null">

那么问题可能是由于未设置类路径,或者正在设置类路径错误,导致无法找到tdgssconfig.jar。

所以我猜在类路径上找不到tdgssconfig.jar

当然,如果JDBC驱动程序能够抛出比NPE更有用的错误消息,那就太好了。我有点担心这似乎是司机的"已知问题":我无法想象在这种情况下会花太多精力来抛出一个更有用的例外。如果他们选择记录这种行为而不是修复它,这对他们来说并没有多大意义

(鸣谢:通过Teradata社区帖子找到。)

相关内容

  • 没有找到相关文章

最新更新