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算子的联合使用
未完待续...