Flink的转换算子——map

map是大家非常熟悉的大数据操作算子,主要用于将数据流中的数据进行转换,形成新的数据流。简单来说,就是一个"一一映射",消费一个元素就产出一个元素。

我们只需要基于DataStream调用map()方法就可以进行转换处理。方法需要传入的参数是接口MapFunction的实现;返回值类型还是DataStream,不过泛型(流中的元素类型)可能改变。

下面的代码,实现了提取WaterSensor中的id字段的功能。

java 复制代码
import com.atguigu.bean.WaterSensor;
import org.apache.flink.api.common.functions.MapFunction;
import org.apache.flink.streaming.api.datastream.DataStreamSink;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

public class Mapdeam {
    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.setParallelism(1);
        DataStreamSource<WaterSensor> senseDS = env.fromElements(new WaterSensor("s1", 1l, 1)
                , new WaterSensor("s1", 2l, 2),
                new WaterSensor("s1", 3l, 3)
        );




        SingleOutputStreamOperator<String> map = senseDS.map(sense -> sense.getId());
        map.print();

        env.execute();
    }
}

map是一个一对一的算子,也就是说输入一个数据那经过map算子之后也只会输出一个数据

根据代码中

java 复制代码
SingleOutputStreamOperator<String> map = senseDS.map(sense -> sense.getId());

可知 是将senseDS的数据经过(sense -> sense.getid())的表达式进行的输出

也可以使用匿名类的方法实现如下:

java 复制代码
 senseDS.map(new MapFunction<WaterSensor, String>() {
            @Override
            public String map(WaterSensor waterSensor) throws Exception {
                return waterSensor.getId();
            }
        }).print();

但是通过直观感受使用第一个方法代码比较简洁

请各位自行选择

谢谢

相关推荐
寻寻觅觅☆11 小时前
东华OJ-基础题-31-素数(C++)
开发语言·c++·算法
松小白song11 小时前
PID详解+Matlab实现
开发语言·数据结构·matlab
码农小白AI11 小时前
AI审核驱动动态预警:IACheck如何重塑环境数据一致性监测与质量管控新模式
大数据·人工智能
LaughingZhu11 小时前
Product Hunt 每日热榜 | 2026-04-02
大数据·人工智能·经验分享·搜索引擎
张二娃同学11 小时前
基于 Python 与 Tkinter 的猜数字游戏设计与实现:支持玩家猜数与 AI 反向推理
开发语言·git·python·游戏·开源
jwn99911 小时前
PHP vs 易语言:5大核心区别详解
开发语言·php
福客AI智能客服11 小时前
低价竞争之外,商家正在重新思考客服的价值
大数据·人工智能
Mr_Xuhhh11 小时前
C++算法刷题:排序子序列、削减整数、最长上升子序列(二)题解
开发语言·c++·算法
迈巴赫车主11 小时前
蓝桥杯 19717 挖矿java
java·开发语言·数据结构·算法·职场和发展·蓝桥杯