首页 > 编程知识 正文

flink转换算子,js map filter

时间:2023-05-05 03:30:47 阅读:126919 作者:1600

每个变换运算符都可以处理和转换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

检查点

保存点

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。