[英]How to use sinkTo in Flink to write multi file in AWS S3
我想將許多客戶的數據保存在不同的文件中。
現在,數據存儲在 DataStream 變量中。 如何使用 sinkTo 在 AWS S3 中寫入多文件。 每個文件包含一個客戶的數據,文件名是客戶名。
public static void writeMultiFile(DataStream<Tuple5<String, Long, Double, String, String>> data) throws Exception {
String currentDir = System.getProperty("user.dir");
Path pathNew = new Path(currentDir + "/output/");
OutputFileConfig config = OutputFileConfig
.builder()
.withPartPrefix("namefile")
.withPartSuffix(".parquet")
.build();
final FileSink<GenericRecord> sink = FileSink
.forBulkFormat(pathNew, AvroParquetWriters.forGenericRecord(schema))
.withOutputFileConfig(config)
.build();
data.keyBy(value->value.f0).map(new convertGenericRecord()).sinkTo(sink);
}
我需要按鍵更改文件名。 上面的代碼不能做到這一點,文件名必須是預定義的,不能通過按鍵動態更改。
請幫我!
您可以通過實施BucketAssigner
來做到這一點。
沿着這些線的東西:
public static final class KeyBucketAssigner
implements BucketAssigner<Event, String> {
private static final long serialVersionUID = 987325769970523326L;
@Override
public String getBucketId(final Event element, final Context context) {
return String.valueOf(Event.key);
}
@Override
public SimpleVersionedSerializer<String> getSerializer() {
return SimpleVersionedStringSerializer.INSTANCE;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.