簡體   English   中英

如何在 Flink 中使用 sinkTo 在 AWS S3 中寫入多文件

[英]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;
    }
}

文檔
javadocs

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM