【发布时间】:2020-05-23 05:46:51
【问题描述】:
我试图从 gcs 路径中使用通配符读取数据。我的文件是 bzip2 格式,大约 300k 文件位于 gcs 路径中,具有相同的通配符表达式。我正在使用下面的代码 sn-p 来读取文件。
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;
}
}));
但性能很差,以当前速度使用上述代码读取该文件大约需要 3 天时间。有没有我可以在云数据流中使用的替代 api 从 gcs 读取这么多文件,当然性能很好。我之前使用过 TextIO,但由于模板序列化限制为 20MB,它失败了。
【问题讨论】:
-
300k 文件的总传输大小是多少?
-
它是在 Dataflow 上运行还是在您的计算机上运行?
-
@ParthMehta 总传输大小约为 1 TB。
-
根据 chamikara 评论修复模板大小错误后,如果您使用 TextIO 也可以使用beam.apache.org/releases/javadoc/2.19.0/org/apache/beam/sdk/io/…
-
@RezaRokni 我刚刚看到你的回答,但我昨天得到了同样的解决方案。感谢您的帮助。
标签: google-cloud-platform google-cloud-dataflow apache-beam apache-beam-io