私のプロジェクトでは、私のパイプラインで処理されるデータにいくつかのメタデータを追加しようとしています。メタデータは、src-folderの隣のresourcesというサブフォルダのDBFファイルにあります。Google DataflowでDataflowPipelineRunnerとして実行しているときにリソースファイルにアクセスする
src-folderにはメインクラスがあり、いくつかのパッケージ(IO、処理、集約、utils)があります。
パイプラインが定義されているメインクラスのメタデータでファイルを読み込んで処理します。次のように私は、ファイルにアクセスするために使用していたコードは次のとおりです。
File temp1 = new File("resources/xxx.dbf");
ファイルを使用して見つかった場合、私がチェック:
LOG.info(temp1.exists())
罰金実行されます。
PubSubIOを使用して読み込んだ文字列としてのメッセージがあります。このファイルの内容を使用して、キーと値を含むマップを埋めます。
Map<String, ArrayList<Double>> sensorToCoordinates = coordinateData.getSensorLocations();
私はその後、私が作った「SensorValues」と呼ばれるカスタムクラスの静的変数を設定します。
SensorValue.setKeyToCoordinates(sensorToCoordinates);
SensorValueクラスに文字列からの着信メッセージを解析するとき、私は(パルド機能を使用して作られましたPCollectionからPCollectionに向かう)マップは、SensorValueクラスのコンストラクタで使用されます。
このコードをDirectPipelineRunnerを使用して実行すると、完璧に動作します。しかし、DataflowPipelineRunnerを使用して、SensorValueコンストラクタでマップにアクセスしようとすると、NullPointerExceptionが発生します。
DataflowPipelineRunnerを使用しているときにsetterが動作しないのはなぜですか(私はそれがいくつかのワーカーに分散された実行と関係していると推測しています)、そして何らかの静的リソースファイルあなたのパイプラインを豊かにする?
私は最初の解決策を試してみました。 私は 'PCollectionView