Flink 算子Operators总结

Operator作用流的转换
map将一个元素转换成另外一个元素DataStream → DataStream本
flapmap将几个的一个元素转换为零个,一个或者多个DataStream → DataStream
filter保留集合中返回true的元素DataStream → DataStream
keyBy对数据流进行逻辑分区,相同的key在同一分区DataStream → KeyedStream
reduce遍历集合,依次合并元素最终生产一个元素KeyedStream → DataStream
fold遍历结合从第一个元素到最后一个元素依次连接起来KeyedStream → DataStream
AggregationsemmmmKeyedStream → DataStream
Window基于已经分区的stream,将元素划分窗口KeyedStream → WindowedStream
WindowAll基于未分区的stream,将所有元素集中到一个taskDataStream → AllWindowedStream
Apply(Window)自定义函数处理窗口内所有的元素WindowedStream → DataStream AllWindowedStream → DataStream
Window Reduce窗口内所有元素reduce到一个结果WindowedStream → DataStream
Window Fold同stream的foldWindowedStream → DataStream
Aggregations on windows同stream的AggregationsWindowedStream → DataStream
Union将两个流合并DataStream* → DataStream
Window Join两个流join成一个流,指定分区key,在指定window,窗口是必须的DataStream,DataStream → DataStream
Interval Join流2 join 流1中一段时间的元素KeyedStream,KeyedStream → DataStream
Window CoGroup双流join,指定窗口DataStream,DataStream → DataStream
Connect联合两个流,保留各种stateDataStream,DataStream → ConnectedStreams
CoMap, CoFlatMap同map, CoFlatMapConnectedStreams → DataStream
Split流拆分DataStream → SplitStream
Select从SplitStream分离出DataStreamSplitStream → DataStream
Iterate-DataStream → IterativeStream → DataStream
---
Extract Timestamps设置event timeDataStream → DataStream
  • map 将每个元素乘以2

 

DataStream<Integer> dataStream = //...
dataStream.map(new MapFunction<Integer, Integer>() {
    @Override
    public Integer map(Integer value) throws Exception {
        return 2 * value;
    }
});
  • flatMap 单词分隔

 

dataStream.flatMap(new FlatMapFunction<String, String>() {
    @Override
    public void flatMap(String value, Collector<String> out)
        throws Exception {
        for(String word: value.split(" ")){
            out.collect(word);
        }
    }
});
  • filter 保留value=0的元素

 

dataStream.filter(new FilterFunction<Integer>() {
    @Override
    public boolean filter(Integer value) throws Exception {
        return value != 0;
    }
});
  • keyby

 

dataStream.keyBy("someKey") // Key by field "someKey"
dataStream.keyBy(0) // Key by the first element of a Tuple
  • reduce 求和

 

keyedStream.reduce(new ReduceFunction<Integer>() {
    @Override
    public Integer reduce(Integer value1, Integer value2)
    throws Exception {
        return value1 + value2;
    }
});
  • fold
    A fold function that, when applied on the sequence (1,2,3,4,5), emits the sequence "start-1", "start-1-2", "start-1-2-3", ..

 

DataStream<String> result =
  keyedStream.fold("start", new FoldFunction<Integer, String>() {
    @Override
    public String fold(String current, Integer value) {
        return current + "-" + value;
    }
  });
  • Aggregations

 

keyedStream.sum(0);
keyedStream.sum("key");
keyedStream.min(0);
keyedStream.min("key");
keyedStream.max(0);
keyedStream.max("key");
keyedStream.minBy(0);
keyedStream.minBy("key");
keyedStream.maxBy(0);
keyedStream.maxBy("key");
  • Window Join

 

dataStream.join(otherStream)
    .where(<key selector>).equalTo(<key selector>)
    .window(TumblingEventTimeWindows.of(Time.seconds(3)))
    .apply (new JoinFunction () {...});
  • Interval Join

 

// this will join the two streams so that
// key1 == key2 && leftTs - 2 < rightTs < leftTs + 2
keyedStream.intervalJoin(otherKeyedStream)
    .between(Time.milliseconds(-2), Time.milliseconds(2)) // lower and upper bound
    .upperBoundExclusive(true) // optional
    .lowerBoundExclusive(true) // optional
    .process(new IntervalJoinFunction() {...});
  • Split

 

SplitStream<Integer> split = someDataStream.split(new OutputSelector<Integer>() {
    @Override
    public Iterable<String> select(Integer value) {
        List<String> output = new ArrayList<String>();
        if (value % 2 == 0) {
            output.add("even");
        }
        else {
            output.add("odd");
        }
        return output;
    }
});

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值