Flink-算子-Full Window Partition

Full Window Partition Processing on DataStream #
DataStream 上的全窗口分区处理

DataStream 上使用全窗口分区处理 API。Flink 现在支持键控(key)和非键控 (not key)DataStream 直接转换为 PartitionWindowedStreamPartitionWindowedStream 表示将每个 subtask(子任务) 的所有记录分别收集到一个完整的窗口中。PartitionWindowedStream 支持 mapPartitionsortPartitionaggregate 和 reduce 四个 API。

注意:有关全窗口分区处理的设计和实现的详细信息,请参阅提案和设计文档 FLIP-380:支持非键控 DataStream 上的全分区处理

MapPartition (数据完全进入窗口后,才执行处理)

MapPartition 表示将每个 subtask 的所有记录分别收集到一个完整的窗口中,并在每个 subtask 中使用给定的 MapPartitionFunction 处理它们。MapPartitionFunction 在输入结束时调用

计算每个 subtask 中元素之和的示例如下:

DataStream<Integer> dataStream = //...
PartitionWindowedStream<Integer> partitionWindowedDataStream = dataStream.fullWindowPartition();

DataStream<Integer> resultStream = partitionWindowedDataStream.mapPartition(
        new MapPartitionFunction<Integer, Integer>() {
            @Override
            public void mapPartition(
                    Iterable<Integer> values, Collector<Integer> out) {
                int result = 0;
                for (Integer value : values) {
                    result += value;
                }
                out.collect(result);
            }
        }
);

SortPartition # 排序分区(数据完全进入窗口后,才执行处理

SortPartition 表示将每个 subtask 的所有记录分别收集到一个完整的窗口中,并在输入结束时按每个 subtask 中给定的记录比较器对它们进行排序。

在每个 subtask 中按 Tuples 的第一个元素对记录进行排序的示例如下:

DataStream<Tuple2<Integer, Integer>> dataStream = //...
PartitionWindowedStream<Tuple2<Integer, Integer>> partitionWindowedDataStream = dataStream.fullWindowPartition();
DataStream<Integer> resultStream = partitionWindowedDataStream.sortPartition(0, Order.ASCENDING);

Aggregate # 聚合

Aggregate 表示将每个 subtask 的所有记录分别收集到一个完整的窗口中,并将给定的 AggregateFunction 应用于该窗口的记录。为每个元素调用 AggregateFunction,在窗口内以增量方式聚合值。

聚合每个 subtask 中的记录的示例如下:

DataStream<Tuple2<Integer, Integer>> dataStream = //...
PartitionWindowedStream<Tuple2<Integer, Integer>> partitionWindowedDataStream = dataStream.fullWindowPartition();
DataStream<Integer> resultStream = partitionWindowedDataStream.aggregate(new AggregateFunction<>{...});

Reduce # 减少

Reduce 表示对分区中的所有记录应用 reduce 转换。将为窗口中的每条记录调用 ReduceFunction。示例如下:

DataStream<Tuple2<Integer, Integer>> dataStream = //...
PartitionWindowedStream<Tuple2<Integer, Integer>> partitionWindowedDataStream = dataStream.fullWindowPartition();
DataStream<Integer> resultStream = partitionWindowedDataStream.aggregate(new ReduceFunction<>{...});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值