2016-02-22 17 views
0

我必須通過其中的日期字段對數據進行分區。我正在使用分區轉換。雲數據流 - 使用PcollectionList時堆空間錯誤

當我按月份劃分年度數據時,Partition會返回一個Pcollectionlist,它有12個pcollection。這工作正常。

當我不得不一天分。我將不得不在PcollectionList中創建1 * 12 * 31的Pcollection。這通過堆空間錯誤。我只嘗試了2個月的數據。也就是說,

a PcollectionList of 2*31 Pcollection 

我嘗試使用N1-HIGHMEM-4和N1-HIGHMEM-8機有10多名工人。它仍然通過堆空間錯誤。我只用2.0 MiB文件進行測試。所以我相信數據大小不應該是一個問題。屏幕截圖如下。

enter image description here

enter image description here

請幫我解決這個問題。或者我的解決方案的工作也是最受歡迎的。

在此先感謝。

回答

1

這聽起來像是你試圖獲得數據的時間劃分。你看過windowing?它應該允許您每月/每日/每小時開窗而不需要執行分區。如果窗口不適用,你能解釋爲什麼你需要白天進行分區嗎?

你如何使用分區結果?由於每個接收器的字節緩衝區,您可能會遇到流水線爲known bug,且流水線中有許多接收器會遇到OOM錯誤。

+0

如果我沒有錯,窗口會在元素到達Dataflow時對它們進行分組。我的用例是不同的。我正在處理交易數據。比方說,我有一個名爲「transaction_date」的字段,我需要通過transaction_date字段對事務進行分組,並將數據保存在不同的BQ表中。我試過GroupBy,它會返回Pcollection >>,但我相信我可以在BQ中只收集Pcollection 。當我嘗試使用變形創建來自Iterable 的Pcollection 時,我無法做到這一點,因爲我需要Create.of(Values)的管道。 –

+0

窗口化通過稱爲「事件時間」的每個元素的時間戳對這些元素進行分組。使用PubSub時,默認的時間戳分配如您所說 - 到達時間。但是,您可以使用PubSubIO設置特定的時間戳(例如發佈時間或數據的其他屬性)。請參見[PubSubIO.Read#timestampLabel](https://cloud.google.com/dataflow/java-sdk/JavaDoc/com/google/cloud/dataflow/sdk/io/PubsubIO.Read#timestampLabel-java.lang.String - )獲取更多信息。 –

+0

我正在使用TEXTIO進行批處理。我將得到一個具有年度交易數據的文件。我需要對此進行一些補償。按月使用交易日期字段對數據進行分組,並將其匯入由月份名稱後綴創建的單獨表格中。我希望現在我的用例很清楚。 –