0

我使用下面的代碼來讀取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) 

回答

0

Teradata JDBC driver documentation

如果您收到以下例外情況之一:

  • NullPointerException異常在com.teradata.tdgss.jtdgss.TdgssConfigApi.GetMechanisms
  • 拋出:IllegalArgumentException 「的InputStream不能爲空」 在javax.xml.parsers.DocumentBuilder.parse,在com.teradata.tdgss.jtdgss.TdgssParseXml。解析

那麼問題可能是 由於未設置,或類路徑被設置 不當,使得tdgssconfig.jar不能找到類路徑。

所以我猜想在類路徑中找不到tdgssconfig.jar

當然,如果JDBC驅動程序可能拋出比NPE更有幫助的錯誤消息,那將會很不錯。我有點擔心,這似乎是司機的一個「已知問題」:我無法想象,在這種情況下,拋出更有幫助的例外情況需要很多努力。對於他們來說,如果他們選擇記錄這種行爲而不是解決這個問題,他們並沒有多說。

(致謝:通過this Teradata Community post找到)