问题描述:
运行使用Spark Jdbc读取postgresql程序报错:
Exception in thread "main" java.lang.NullPointerException
at java.util.Hashtable.put(Hashtable.java:460)
at java.util.Properties.setProperty(Properties.java:166)
at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions.$anonfun$asProperties$(JDBCOPtions.scala:51)
...
at scala.Option.getOrElse(Option.scala:189)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:307)
...
代码:
spark.read()
.format("jdbc")
.option("url", url)
.option("query", query)
.option("dbtable", dbtable)
...
.load();//报错定位到这行代码
解决方法:
不要个option设置null值,如:
reader = spark.read()
.format("jdbc")
.option("url", url);
if(query != null) {
reader.option("query", query)
}
if(dbtable != null) {
reader.option("dbtable", dbtable)
}
...
reader.load();
因为JDBC query和dbtable配置项不能同时指定,有一个值设置为了null.使用option设置null值就报错了.错误代码定位在了reader.load()方法,错误不好排查