【以下的问题经过翻译处理】 我正在用 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。有没有人有什么建议?