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();

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

请各位自行选择

谢谢

相关推荐
kkeeper~7 小时前
0基础C语言积跬步之深入理解指针(5下)
c语言·开发语言
一直不明飞行7 小时前
Java的equals(),hashCode()应该在什么时候重写
java·开发语言·jvm
盲敲代码的阿豪7 小时前
Python 入门基础教程(爬虫前置版)
开发语言·爬虫·python
basketball6168 小时前
C++ 构造函数完全指南:从入门到进阶
java·开发语言·c++
互联科技报8 小时前
2026超融合选型:Top5品牌与市场格局解读
开发语言·perl
weixin199701080168 小时前
[特殊字符] 智能数据采集:数字化转型的“数据石油勘探队”(附Python实战源码)
开发语言·python
淘矿人8 小时前
Claude辅助DevOps实践
java·大数据·运维·人工智能·算法·bug·devops
想唱rap8 小时前
IO多路转接之poll
服务器·开发语言·数据库·c++
SeaTunnel9 小时前
AI 让 SeaTunnel 读源码和调试过时了吗?
大数据·数据库·人工智能·apache·seatunnel·数据同步
@杰克成9 小时前
Java学习30
java·开发语言·学习