0

我有一堆存儲在谷歌雲存儲上的文本文件(〜1M)。當我讀到這些文件到谷歌雲數據流的管道的處理,我總是得到以下錯誤:解決apache波束管道導入錯誤[BoundedSource對象大於允許的限制]

Total size of the BoundedSource objects returned by BoundedSource.split() operation is larger than the allowable limit 

的故障排除頁說:

You might encounter this error if you're reading from a very large number of files via TextIO, AvroIO or some other file-based source. The particular limit depends on the details of your source (e.g. embedding schema in AvroIO.Read will allow fewer files), but it is on the order of tens of thousands of files in one pipeline.

這是否意味着我不得不把文件分割成小批量,而不是一次導入全部?

我正在使用dataflow python sdk開發管道。

+0

我不確定爲什麼人們投票結束這個問題。人們在使用Apache Beam進行編程時經常會遇到一個非常合理的問題。 – jkff

回答

1

將文件拆分爲批處理是一種合理的解決方法 - 例如,使用多個ReadFromText轉換或使用多個管道讀取它們。我認爲在1M文件的級別上,第一種方法將不起作用。最好使用新功能:

讀取大量文件的最佳方法是使用ReadAllFromText。它沒有可擴展性限制(儘管如果你的文件數量非常小,性能會更差)。

它將在Beam 2.2.0中可用,但是如果您願意使用快照構建,它已經在HEAD中可用。

對於Java版本,另請參閱How can I improve performance of TextIO or AvroIO when reading a very large number of files?