AvroIO.writeGenericRecords(schema) 是否能够附加到 java 中的现有文件?

问题描述 投票:0回答:1

我已经为这个问题绞尽脑汁了一段时间,我在 Avro 中使用 java,使用窗口写入、分片和分片模板“W-P-sssss-of-nnnnn”编写文件,但现在要求追加现有分片数量的内容。

PCollection<GenericRecord> collection = ...
collection.apply("write to bucket", 
AvroIO.writeGenericRecords(schema)
.to("gs://my-bucket/folder")
.withWindowedWrites()
.withNumShards(20)
.withShardNameTemplate("ssss-of-nnnn"));

我知道分片数将尝试创建 20 个文件,但如果存在更多数据,这些文件将会增加。我一直在尝试附加到现有内容,但我只得到文件被覆盖。

当然,如果我们设置一个更独特的分片模板,比如“W-P-sssss-of-nnnnn”,我们会得到更多的文件,避免文件被覆盖,但是,如何向现有的20个分片追加数据? 这可能吗?

我尝试使用 Dynamic Destinations 和 Value providers,但这允许我操作文件夹目标或文件命名策略,但这并没有让我更接近于定义如何附加而不是覆盖文件。

java avro
1个回答
0
投票

Avro 将自行处理创建并发送到存储桶的数据量,以及附加数据,只要您不破坏其文件命名约定即可。您还需要足够的数据才能进行测试。

© www.soinside.com 2019 - 2024. All rights reserved.