食品经营许可网站增项怎么做网站建设你懂的
2026/4/13 23:50:54 网站建设 项目流程
食品经营许可网站增项怎么做,网站建设你懂的,wordpress 论坛 整合,要建立网站文章目录一、算子能力对照表二、测试数据三、map#xff1a;一进一出四、filter#xff1a;只负责“要不要”五、flatMap#xff1a;一进多出六、process#xff1a;最底层、最强大的算子七、如何选择算子#xff1f;八、总结在学习 Flink 的过程中#xff0c;map、flatM…文章目录一、算子能力对照表二、测试数据三、map一进一出四、filter只负责“要不要”五、flatMap一进多出六、process最底层、最强大的算子七、如何选择算子八、总结在学习 Flink 的过程中map、flatMap、filter、process是最常用、也是最容易让人迷糊的几个算子。很多初学者都会有这些疑问为什么flatMap里一定要写Collector为什么map不能返回多个元素process到底强在哪里什么时候该用本文将从接口设计出发结合可运行 Demo 实际运行结果带你真正理解 Flink 算子的设计思想。一、算子能力对照表算子输入 → 输出是否可丢数据是否可多输出是否可用时间/状态map1 → 1❌❌❌filter1 → 0/1✅❌❌flatMap1 → 0/N✅✅❌process1 → 0/N✅✅✅一句话总结越简单的算子约束越多Flink 能优化得越好越底层的算子能力越强但责任全在你。二、测试数据hello flink hello world三、map一进一出1. 接口定义publicinterfaceMapFunctionT,R{Rmap(Tvalue)throwsException;}特点一个输入必须返回一个输出不能多、不能少2. Demo字符串转大写StreamExecutionEnvironmentenvStreamExecutionEnvironment.getExecutionEnvironment();DataStreamStringsourceenv.fromElements(hello flink,hello world);source.map(value-value.toUpperCase()).print();try{env.execute(Simple Map Example);}catch(Exceptione){thrownewRuntimeException(e);}DataStream 程序是惰性执行的必须调用 execute() 才会触发作业执行3. 运行结果8 HELLO WORLD 7 HELLO FLINK四、filter只负责“要不要”1. 接口定义publicinterfaceFilterFunctionT{booleanfilter(Tvalue)throwsException;}注意不能修改数据只能决定保留 or 丢弃2. Demo只保留包含 flink 的行source.filter(line-line.contains(flink)).print();3. 运行结果6 hello flink五、flatMap一进多出1. 接口定义publicinterfaceFlatMapFunctionT,O{voidflatMap(Tvalue,CollectorOout)throwsException;}2. 为什么要Collector因为flatMap 允许一条输入输出 0 条、1 条或多条数据返回值已经不够用所以 Flink 把“输出控制权”交给你。3. Demo拆分单词source.flatMap((Stringline,CollectorStringout)-{for(Stringword:line.split( )){out.collect(word);}}).returns(Types.STRING)// ⭐ 关键补全类型信息.print();4. 运行结果4 hello 4 world 3 hello 3 flink六、process最底层、最强大的算子map / filter / flatMap 能做的process 全都能做并且还能获取时间使用状态注册定时器1. 接口结构publicabstractclassProcessFunctionI,O{publicabstractvoidprocessElement(Ivalue,Contextctx,CollectorOout)throwsException;}2. Demo手写 WordCount不使用 keyBy.sumsource.keyBy(value-value).process(newProcessFunctionString,Tuple2String,Integer(){privateintcount0;OverridepublicvoidprocessElement(Stringvalue,Contextctx,CollectorTuple2String,Integerout){count;out.collect(Tuple2.of(value,count));}}).print();3. 运行结果3 (hello flink,1) 6 (hello world,1)⚠️ 注意这里只是演示process能力实际生产应使用Keyed State而不是普通成员变量七、如何选择算子官方推荐原则能用 map就别用 flatMap能用 flatMap就别用 process原因是简单算子 → Flink 能做更多优化process → 灵活但难维护、难调优八、总结map最简单1 → 1filter只做判断flatMap拆分、多输出process终极武器慎用理解算子 ≠ 记 API理解算子 理解接口设计 数据流模型

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询