gpt4 book ai didi

google-cloud-dataflow - 读取大量文件时,如何提高 TextIO 或 AvroIO 的性能?

转载 作者:行者123 更新时间:2023-12-01 03:20:51 25 4
gpt4 key购买 nike

TextIO.read()AvroIO.read() (以及其他一些 Beam IO)在读取扩展为大量文件(例如 1M 文件)的文件模式时,默认情况下在当前的 Apache Beam 运行程序中表现不佳。

如何有效地读取如此大量的文件?

最佳答案

当您事先知道正在使用 TextIO 读取的文件模式时或 AvroIO要扩展成大量文件,可以使用recently added功能 .withHintMatchesManyFiles() ,目前在 TextIO 上实现和 AvroIO .

例如:

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

使用这个提示会导致转换以一种为读取大量文件而优化的方式执行:在这种情况下可以读取的文件数量实际上是无限的,并且很可能管道将运行得更快、更便宜、更可靠这个提示。

但是,如果文件模式实际上只匹配少量文件(例如,几十个或几百个文件),则它的性能可能比没有提示的情况更糟。

在幕后,这个提示导致转换分别通过 TextIO.readAll() 执行。或 AvroIO.readAll() ,这是 read() 的更灵活和可扩展的版本允许读取 PCollection<String>文件模式(其中每个 String 是一个文件模式),有同样的警告:如果匹配文件模式的文件总数很少,它们的性能可能比简单的 read() 差。使用在管道构建时指定的文件模式。

关于google-cloud-dataflow - 读取大量文件时,如何提高 TextIO 或 AvroIO 的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45362108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com