首页 > 解决方案 > 尝试从 Apache Beam 中的选项获取值时出现空指针异常

问题描述

我正在使用 JAVA8 和 Apache Beam 2.19.0 来运行一些数据流作业。根据我的要求,我在代码中动态设置选项值,如下所示。

option.setDay(ValueProvider.StaticValueProvider.of(sDay))

我试图在同一个数据流管道的另一个转换中得到这个。当我运行小数据时,它的工作正常我能够获得 options.getDay().get() 值,但是对于不同文件中的 500 万行等大数据,它在 options.getDay().get 处给出空指针异常()。

为这个问题添加更多示例点以便更好地理解。

  1. 如果我正在阅读 100 万行,它执行得很好。
  2. 如果我正在阅读 200 万行,它执行得很好,但给了 Throttling logger worker。它仅用了 25.107 秒就用完了 30 秒的日志配额
  3. 如果我正在阅读超过 200 万行,它会给 Throttling logger 工作人员。它仅在 25.107 秒内就用完了 30 秒的日志配额,并且在 options.getDay().get() 处出现空指针异常

标签: google-cloud-dataflowapache-beamdataflowapache-beam-io

解决方案


如果我理解正确,看起来您正在绑定setDay流中的每个元素。我猜想一个元素正在调用set,而另一个元素正在尝试getset再次并行,这会导致空指针异常。

要解决此问题,您可以将sDay元素本身传递给另一个属性,而不是修改选项。


推荐阅读