问题描述:
运行使用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()方法,错误不好排查

博客内容讲述了在使用Spark JDBC从PostgreSQL读取数据时遇到NullPointerException的问题,原因是配置项中存在null值。解决方案是避免为option设置null值,特别是在`query`和`dbtable`选项中,这两个选项不能同时为null。通过条件判断确保只有非空的配置项被传递,从而避免了程序异常。
2113

被折叠的 条评论
为什么被折叠?



