2017-07-27 43 views

回答

0

當你事先知道filepattern被讀取TextIOAvroIO將會擴展到大量的文件,你可以使用recently added功能.withHintMatchesManyFiles(),這是目前在TextIOAvroIO實施。

例如:

PCollection<String> lines = p.apply(TextIO.read() 
    .from("gs://some-bucket/many/files/*") 
    .withHintMatchesManyFiles()); 

使用該提示會導致用於讀取大量文件的最優化的方式來執行變換:可在這種情況下可以讀出的文件的數量幾乎是無限的,並且最有可能的是,管道運行速度會更快,更便宜,而且比沒有這個提示更可靠。

但是,如果文件模式實際上只匹配少量文件(例如,幾十或幾百個文件),它可能會比沒有提示更差。

引擎蓋下,此提示使變換分別經由TextIO.readAll()AvroIO.readAll()來執行,它們是read()更靈活和可擴展的版本,其允許讀取filepatterns(其中每個String是filepattern)的PCollection<String>,具有相同的警告:如果與文件模式匹配的文件總數很少,那麼它們可能比簡單的read()更糟糕,它在管道構建時指定了filepattern。

相關問題