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

时间:2017-11-11 00:19:32

标签: apache-spark jdbc apache-spark-sql spark-dataframe teradata

我使用以下代码从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)

1 个答案:

答案 0 :(得分:3)

来自Teradata JDBC driver documentation

  

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

     
      
  • com.teradata.tdgss.jtdgss.TdgssConfigApi.GetMechanisms中的NullPointerException
  •   
  • IllegalArgumentException&#34; InputStream不能为null&#34;在javax.xml.parsers.DocumentBuilder.parse,位于com.teradata.tdgss.jtdgss.TdgssParseXml.parse
  •   
     那么问题可能就是   由于未设置类路径,或者正在设置类路径   错误,无法找到tdgssconfig.jar。

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

当然,如果JDBC驱动程序可能抛出比NPE更有用的错误消息,那将会很好。我有点担心这似乎是一个已知的问题&#39;与司机:我无法想象在这种情况下抛出一个更有用的例外会花费很多精力。如果他们选择记录这种行为而不是解决这个问题,那么对他们来说并不是很重要。

(致谢:通过this Teradata Community post找到。)