由于工作需要最近学习flink
现记录下Flink介绍和实际使用过程
这是flink系列的第三篇文章
算子介绍
用户通过算子能将一个或多个 DataStream 转换成新的 DataStream,在应用程序中可以将多个数据转换算子合并成一个复杂的数据流拓扑。
这部分内容将描述 Flink DataStream API 中基本的数据转换API,数据转换后各种数据分区方式,以及算子的链接策略。
数据流常用转换方法
Map
DataStream → DataStream
map可以理解为映射,对每个元素进行一定的变换后,映射为另一个元素。
DataStream<Integer> dataStream = //...
dataStream.map(new MapFunction<Integer, Integer>() {
@Override
public Integer map(Integer value) throws Exception {
return 2 * value;
}
});
FlatMap
DataStream → DataStream
flatmap可以理解为将元素摊平,每个元素可以变为0个、1个、或者多个元素。
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
DataStream → DataStream
评估每个元素的布尔函数并保留函数返回 true 的那些。
dataStream.filter(new FilterFunction<Integer>() {
@Override
public boolean filter(Integer value) throws Exception {
return value != 0;
}
});
KeyBy
DataStream → KeyedStream
逻辑上将Stream根据指定的Key进行分区,是根据key的散列值进行分区的。
dataStream.keyBy(value -> value.getSomeKey());
dataStream.keyBy(value -> value.f0);
reduce
KeyedStream → DataStream
reduce是归并操作,它可以将KeyedStream 转变为 DataStream。
keyedStream.reduce(new ReduceFunction<Integer>() {
@Override
public Integer reduce(Integer value1, Integer value2)
throws Exception {
return value1 + value2;
}
});
Union
多个DataStream → DataStream
dataStream.union(otherStream1, otherStream2, ...);