每个变换运算符都可以处理和转换Flink流,是Flink流处理的非常核心的API。
map map操作符使用用户定义的map函数对一个DataStream中的每个元素进行处理,每个输入元素对应一个输出元素,最终整个数据流转换为一个新的DataStream。 输出数据流DataStream[OUT]的类型可能与输入的数据流DataStream[IN]不同。
如果有业务需求,可以在拼接一些数据或增大倍数的场景中使用。
您可以复盖MapFunction或RichMapFunction来自定义map函数。
我们创建了一个新的映射实现映射函数接口,并重新编写了方法。 我们实现的方法很简单,就是将数据流中的元素与字符串连接起来。
将其作为参数传递给流的map方法。
但是,运行时报告了错误
我也研究了半天/(() )/~,但需要注意的是,map ) )方法传递的参数必须严格指定泛型类型,以适应上下文环境。 否则会报告错误。 因为我们做了修改。
执行后的打印正常
过滤器过滤器运算符过滤每个元素,过滤过程使用过滤器函数进行逻辑判断。 对于输入的每个元素,如果filter函数返回True,则保留它;如果返回False,则放弃它。 filter的输入数据类型和输出数据类型一致。
flatmapmap (对我来说,MapFunction只是支持一对一转换。
虽然可能需要处理单个输入元素,但是如果要输出一个或多个输出元素,可以使用flatMap ()。
如果有一个输出,则可以完全用作map
平板映射支持特殊的数据类型Tuple
Tuple
Java API提供从Tuple1到Tuple25的类。 Tuple字段可以是Flink支持的任何数据类型。 有关通过Tuple访问数据的信息,可以使用tuple.f4或getter方法3360tuple.getfield(intposition )从0开始位置索引。 例如,一个Tuple2可以理解为一个map,但相同的key不重复,或者是实体类。
也可以在此基础上汇总起来合计
注意,虽然flatMap可以完全替代map和filter,但Flink仍然保留了这三个API,主要因为map和filter的语义更明确,更明确的语义有助于提高代码的可读性。map可以表示一对一的转换,代码阅读者能够确认对于一个输入,肯定能得到一个输出;filter则明确表示发生了过滤操作。
基耶比
DataStream - KeyedStrem逻辑将流划分为不相交的分区。 每个分区都包含具有相同key的元素,并且在内部实现为hash
滚动聚合算子
这些运算符可以按KeyedStrem的直流进行汇总
sum () )。
最小() )。
max ()
minBy () )
maxBy () )。
不能在单个基本类型的数据流中进行分组操作。
因此,我们创建简单的实体数据流并进行keyBy操作。
keyBy参数类型有两种int和string,但int类型的参数只适用于tuple类型的数据,我们的数据是pojo,所以必须传递给string类型的字段。
另一个值得注意的是,这两种方法的返回值的输出通用型是tuple型
为什么会这样呢? 因为仔细查看keyBy的参数为(int.fields )表示可以传递多个参数。 用多个密钥进行分组。 不能指定具体的分组后类型,因为多个key的类型可能不同。 所以被包装成tuple型回来了。
max只是修改了实体中的max字段,但没有修改其他字段,其优点具有模糊性。
所以我们可以使用maxBy ()
整个数据实体已更改。
flink窗口
flink time
flink state
检查点
保存点