玩转Flink Core Api常用Transformation算子 多案例实战——第七课

DBC 1.6K 0

一、Flink 里面的Map和FlatMap 算子实战订单转换

  • 需求:多数算子,我们会用订单 转换-过滤-分组-统计 来实现
    • 这样大家更加明白应用场景,比如应用到多个方面等
  • 结果类型 idea自动提示
    • 算子后 .var 回车 java类型
    • 算子后 .val 回车 scala类型
  • 什么是java里面的Map操作
    • 一对一 转换对象

代码实现

点击查看完整内容

控制台输出

点击查看完整内容
  • 什么是java里面的FlatMap操作
    • 一对多转换对象

代码实现

点击查看完整内容

控制台输出

点击查看完整内容

二、Flink 里面的RichMap和RichFlatMap 算子实战

  • Rich相关的api更丰富,多了Open、Close方法,用于初始化连接等
  • RichXXX相关Open、Close、setRuntimeContext等 API方法会根据并行度进行操作的
    • 比如并行度是4,那就有4次触发对应的open/close方法等,是4个不同subtask
    • 比如 RichMapFunction、RichFlatMapFunction、RichSourceFunction等

Flink09FlatMapApp

点击查看完整内容

控制台输出

点击查看完整内容

Flink09MapApp

点击查看完整内容

控制台输出

点击查看完整内容

三、Flink 里面的KeyBy分组概念讲解+订单统计实战

KeyBy分组概念介绍

  • keyBy是把数据流按照某个字段分区
  • keyBy后是相同的数据放到同个组里面,再进行组内统计

玩转Flink Core Api常用Transformation算子 多案例实战——第七课插图

代码实战

Flink10KeyByApp

点击查看完整内容

VideoOrderSourceV2

点击查看完整内容

控制台输出

点击查看完整内容
温馨提示

我们可以很清晰的看到,项目中的金额一直在叠加!这就是效果了。类似天猫那种数据大屏,随着数据的源源不断的进来,我们也在进行统计!非常的nice! [aru_55]

  • 常规的数据流转
    • DataStream->keyBy操作->KeyStream->window操作->windowStream->聚合操作->DataStream
  • 注意: KeyBy后的聚合函数,只处理当前分组后组内的数据,不同组内数据互不影响

四、Flink 里面的filter和sum 算子实战电商订单成交价统计

filter过滤、sum 算子—— 大于20的才可以过去

代码实战

Flink11FilterApp

点击查看完整内容

控制台输出

点击查看完整内容
温馨提示

我们先进行过滤,然后再进项相应的操作,要不然这些数据其实在内存中也是会消耗内存的,希望能够理解

这里再给个小例子,链式调用

点击查看完整内容
温馨提示

效果是一样的,但是初学flink的时候,我们多打一点并不吃亏!链式调用代码会更加的简洁,但是可能不太适合初学者,毕竟我们需要熟悉相应的api [aru_42]

五、Flink 核心API Reduce聚合讲解和sum区别应用场景

reduce函数

  • keyBy分组后聚合统计sum和reduce实现一样的效果
  • 例子

Flink12KeyByReduceApp

点击查看完整内容

控制台输出

点击查看完整内容
sum区别
  • sum("xxx")使用的时候,如果是tuple元组则用序号,POJO则用属性名称
  • keyBy分组后聚合统计sum和reduce实现一样的效果
  • sum是简单聚合,reduce是可以自定义聚合,aggregate支持复杂的自定义聚合

六、Flink 核心API maxBy-max-minBy-min 区别和应用

  • 如果是用了keyby,在后续算子要用maxby,minby类型,才可以再分组里面找对应的数据
    • 如果是用max、min等,就不确定是哪个key中选了
    • 如果是keyBy的是对象的某个属性,则分组用max/min聚合统计,只有聚合的字段会更新,其他字段还是旧的,导致对象不准确
    • 需要用maxby/minBy才对让整个对象的属性都是最新的
  • 例子

Flink13KeyByMaxByApp

点击查看完整内容

控制台输出

点击查看完整内容
  • KeyBy后可以用KeyedProcessFunction,更底层的API,有processElement和onTimer函数

发表评论 取消回复
表情 图片 链接 代码

分享