在我的項目中,我試圖向管道中處理的數據添加一些元數據。元數據位於src-folder旁邊名爲resources的子文件夾中的DBF文件中。在Google Dataflow中作爲DataflowPipelineRunner運行時訪問資源文件
src文件夾包含主要類,我有幾個包(IO,處理,聚合,utils)。
我在定義管道的主要類中讀取和處理帶有元數據的文件。我使用訪問該文件的代碼如下:
File temp1 = new File("resources/xxx.dbf");
我檢查,如果該文件是使用中發現:
LOG.info(temp1.exists())
其運行正常。
有消息作爲Strings發佈,我使用PubSubIO閱讀。我使用這個文件的內容來填充包含鍵和值的地圖。
Map<String, ArrayList<Double>> sensorToCoordinates = coordinateData.getSensorLocations();
我然後設置在自定義類的靜態變量被稱爲「SensorValues」我提出:
SensorValue.setKeyToCoordinates(sensorToCoordinates);
當從字符串到SensorValue-I類使用帕爾函數由解析傳入消息(從PCollection到PCollection),該映射用於SensorValue類的構造函數中。
使用DirectPipelineRunner運行此代碼非常完美。但是,當我使用DataflowPipelineRunner並嘗試訪問SensorValue構造函數中的映射時,我遇到了NullPointerException。
現在我想知道爲什麼setter在使用DataflowPipelineRunner時不工作(我猜它與在幾個worker中分配執行有關),以及使用任何靜態資源文件的最佳做法是什麼爲了豐富你的管道?
我試過第一個解決方案,它的工作原理。 我用'PCollectionView