Flink 常用算子总结

1.前言

之前公司是用spark的,现在公司用flink,flink中有很多与spark不同的算子,功能非常强大,这里对一些不同于spark的算子使用方法进行总结,方便以后查阅。

一次可能更新不全,会慢慢总结,希望路过的看到的留言帮忙一起总结,谢谢大家。

2.connect/coMap/coFlatMap

Connect算子主要是为了合并两种或者多种不同数据类型的数据集,合并后会保留原来数据集的数据类型。连接操作允许共享状态数据,也就是说在多个数据集之间可以操作和查看对方数据集的状态

对于ConnectedStreams类型的数据集不能直接进行类似Print()的操作,需要再转换成DataStream类型数据集.

在Flink中ConnectedStreams提供的map()方法和flatMap() 需要定义CoMapFunciton或CoFlatMapFunction分别处理输入的DataStream数据集.

package it.kenn.operators;

import org.apache.flink.api.common.functions.MapFunction;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.ConnectedStreams;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.functions.co.CoMapFunction;

/**
 * @author 
 * @date 2020-11-29
 * 测试connect的使用
 */
public class ConnectDemo {
    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        DataStreamSource<Integer> intStream = env.fromElements(1, 2, 3, 4, 5, 6, 7);
        DataStreamSource<String> strStream = env.fromElements("aa", "bb", "cc", "dd", "ee");
        ConnectedStreams<Integer, String> connectedStreams = intStream.connect(strStream);
        SingleOutputStreamOperator<Tuple2<String, Integer>> useCoMapFuncConnectedStream = connectedStreams.map(new CoMapFunction<Integer, String, Tuple2<String, Integer>>() {
            @Override
            public Tuple2<String, Integer> map1(Integer e) throws Exception {
                return new Tuple2<>("default", e);
            }

            @Override
            public Tuple2<String, Integer> map2(String s) throws Exception {
                return new Tuple2<>(s, 0);
            }
        });
        useCoMapFuncConnectedStream.print();
        env.execute();
    }
}

输出结果

7> (default,4)
8> (default,5)
5> (default,2)
4> (default,1)
6> (default,3)
9> (default,6)
10> (default,7)
5> (aa,0)
9> (ee,0)
7> (cc,0)
6> (bb,0)
8> (dd,0)

上面是比较常规的connect函数的用法,但是实用性不高。两个数据流通过这种处理方式通常不能达到用户想要的效果。

 

2.broadcast和connect算子的联合使用

未完待续...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值