Google cloud platform 使用apache beam从GCS读取文件时面临性能问题

Google cloud platform 使用apache beam从GCS读取文件时面临性能问题,google-cloud-platform,google-cloud-dataflow,apache-beam,apache-beam-io,Google Cloud Platform,Google Cloud Dataflow,Apache Beam,Apache Beam Io,我试图从gcs路径中使用通配符读取数据。我的文件是bzip2格式的,在gcs路径中有大约300k个文件使用相同的通配符表达式。我正在使用下面的代码片段来读取文件 PCollection<String> val = p .apply(FileIO.match() .filepattern("gcsPath")) .apply(FileIO.readMatches().withCompress

我试图从gcs路径中使用通配符读取数据。我的文件是bzip2格式的,在gcs路径中有大约300k个文件使用相同的通配符表达式。我正在使用下面的代码片段来读取文件

    PCollection<String> val = p
            .apply(FileIO.match()
                    .filepattern("gcsPath"))
            .apply(FileIO.readMatches().withCompression(Compression.BZIP2))
            .apply(MapElements.into(TypeDescriptor.of(String.class)).via((ReadableFile f) -> {
                try {
                    return f.readFullyAsUTF8String();
                } catch (IOException e) {
                    return null;
                }
            }));
PCollection val=p
.apply(FileIO.match()
.filepattern(“gcsPath”))
.apply(FileIO.readMatches().withCompression(Compression.BZIP2))
.apply(MapElements.into(TypeDescriptor.of(String.class)).via((ReadableFile f)->{
试一试{
返回f.readFullyAsUTF8String();
}捕获(IOE异常){
返回null;
}
}));
但性能非常差,使用上述代码以当前速度读取该文件大约需要3天。我是否可以在云数据流中使用其他api从gcs读取这么多的文件,当然性能很好。我之前使用过TextIO,但是由于模板序列化限制为20MB,所以失败了。

下面的TextIO()代码解决了这个问题

PCollection<String> input = p.apply("Read file from GCS",TextIO.read().from(options.getInputFile())
                        .withCompression(Compression.AUTO).withHintMatchesManyFiles()
                        );              
PCollection input=p.apply(“从GCS读取文件”,TextIO.Read().from(options.getInputFile())
.withCompression(Compression.AUTO).withHintMatchesManyFiles()
);              

withHintMatchesManyFiles()解决了这个问题。但我仍然不知道FileIO的性能到底是如何糟糕

300k文件的总传输大小是多少?它是在数据流上运行还是在您的计算机上运行?@ParthMehta总传输大小约为1 TB。根据chamikara评论修复模板大小错误后,如果您使用TextIO,您也可以使用@RezaRokni。我刚才看到了您的答案,但我昨天得到了相同的解决方案。谢谢你的帮助。