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
EXPERTE
gefragt vor 5 Monaten56 Aufrufe
1 Antwort
0

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

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

profile picture
EXPERTE
beantwortet vor 5 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen