AWS Glue Postgres JDBC数据源出现NullPointerException错误?

0

【以下的问题经过翻译处理】 我正在用 Java 编写 Spark 作业以在 AWS Glue 上执行。它尝试使用 glueContext.getSource() 方法连接到 Postgres 数据库。它因以下 NullPointerException 而失败:

2023-04-20 14:57:01,183 错误 [main] glue.ProcessLauncher (Logging.scala:logError(94)):用户类异常
java.lang.NullPointerException异常
在 com.amazonaws.services.glue.util.JDBCWrapper$.$anonfun$apply$6(JDBCUtils.scala:914)
在 scala.collection.MapLike$MappedValues.$anonfun$foreach$3(MapLike.scala:252)
在 scala.collection.TraversableLike$WithFilter.$anonfun$foreach$1(TraversableLike.scala:788)
在 scala.collection.immutable.HashMap$HashMap1.foreach(HashMap.scala:230)
在 scala.collection.immutable.HashMap$HashTrieMap.foreach(HashMap.scala:461)
在 scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:787)
在 scala.collection.MapLike$MappedValues.foreach(MapLike.scala:252)
在 scala.collection.generic.Growable.$plus$plus$eq(Growable.scala:58)
在 scala.collection.generic.Growable.$plus$plus$eq$(Growable.scala:49)
在 scala.collection.mutable.MapBuilder.$plus$plus$eq(MapBuilder.scala:25)
在 scala.collection.immutable.DefaultMap.$plus(DefaultMap.scala:40)
在 scala.collection.immutable.DefaultMap.$plus$(DefaultMap.scala:38)
在 scala.collection.immutable.MapLike$$anon$2.$plus(MapLike.scala:101)
在 scala.collection.immutable.MapLike.$anonfun$$plus$plus$1(MapLike.scala:87)
在 scala.collection.TraversableOnce.$anonfun$foldLeft$1(TraversableOnce.scala:156)
在 scala.collection.TraversableOnce.$anonfun$foldLeft$1$adapted(TraversableOnce.scala:156)
在 scala.collection.immutable.Map$Map3.foreach(Map.scala:192)
在 scala.collection.TraversableOnce.foldLeft(TraversableOnce.scala:156)
在 scala.collection.TraversableOnce.foldLeft$(TraversableOnce.scala:154)
在 scala.collection.AbstractTraversable.foldLeft(Traversable.scala:104)
在 scala.collection.TraversableOnce.$div$colon(TraversableOnce.scala:150)
在 scala.collection.TraversableOnce.$div$colon$(TraversableOnce.scala:150)
在 scala.collection.AbstractTraversable.$div$colon(Traversable.scala:104)
在 scala.collection.immutable.MapLike.$plus$plus(MapLike.scala:87)
在 scala.collection.immutable.MapLike.$plus$plus$(MapLike.scala:86)
在 scala.collection.immutable.MapLike$$anon$2.$plus$plus(MapLike.scala:101)
在 com.amazonaws.services.glue.util.JDBCWrapper$.connectionProperties(JDBCUtils.scala:956)
在 com.amazonaws.services.glue.util.JDBCWrapper.connectionProperties$lzycompute(JDBCUtils.scala:739)
在 com.amazonaws.services.glue.util.JDBCWrapper.connectionProperties(JDBCUtils.scala:739)
在 com.amazonaws.services.glue.util.JDBCWrapper.tableDF(JDBCUtils.scala:865)
在 com.amazonaws.services.glue.util.NoCondition$.tableDF(JDBCUtils.scala:87)
在 com.amazonaws.services.glue.util.NoJDBCPartitioner$.tableDF(JDBCUtils.scala:173)
在 com.amazonaws.services.glue.JDBCDataSource.getDynamicFrame(DataSource.scala:1088)
在 com.amazonaws.services.glue.DataSource.getDynamicFrame(DataSource.scala:101)
在 com.amazonaws.services.glue.DataSource.getDynamicFrame$(DataSource.scala:101)
在 com.amazonaws.services.glue.AbstractSparkSQLDataSource.getDynamicFrame(DataSource.scala:725)
在 com.amazonaws.services.glue.DataSource.getDataFrame(DataSource.scala:118)
在 com.amazonaws.services.glue.DataSource.getDataFrame$(DataSource.scala:118)
在 com.amazonaws.services.glue.AbstractSparkSQLDataSource.getDataFrame(DataSource.scala:725)

我连接和构建数据框的代码如下:

scala.collection.mutable.Map<String, String> optionsMap = new scala.collection.mutable.HashMap<>();

optionsMap.put("url", "jdbc:postgresql://[主机名]:5432/postgres");
optionsMap.put("dbtable", "public.test");
optionsMap.put("用户", "postgres");
optionsMap.put("密码", "Passw0rd!123");

JsonOptions jsonOptions = new JsonOptions(optionsMap);

DataSource 来源 = super.getGlueContext().getSource(
getConfiguration().getFormat().toLowerCase(),
json选项,
"",
"");

我已确认我的工作具有 IAM 角色,该角色具有足够的权限来读取 RDS。有没有人有什么建议?

profile picture
专家
已提问 5 个月前43 查看次数
1 回答
0

【以下的回答经过翻译处理】 最终发现是一个隐藏的空选项输入。来自另一个类的用户名和密码选项没有正确解析,因此返回了null值。这最终导致了在Glue代码中深层次的空指针异常。

因此,如果您遇到这种空指针异常,请确保JsonOptions映射中的所有选项输入都是非空的。

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则