2017-07-27 69 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。

相关问题