Flink实战:全局TopN分析与实现

点击蓝字

640?wx_fmt=png

关注~~

  • 按照区域areaId+商品gdsId分组,计算每个分组的累计销售额

  • 将得到的区域areaId+商品gdsId维度的销售额按照区域areaId分组,然后求得TopN的销售额商品,并且定时更新输出

与窗口TopN不同,全局TopN没有时间窗口的概念,也就没有时间的概念,因此使用ProcessingTime语义即可,并且也不能再使用Window算子来操作,但是在这个过程中需要完成数据累加操作与定时输出功能,选择ProcessFunction函数来完成,使用State保存中间结果数据,保证数据一致性语义,使用定时器来完成定时输出功能。

销售额统计

对数据流按照区域areaId+商品gdsId分组,不断累加销售额保存起来,然后输出到下游。

    val env =StreamExecutionEnvironment.getExecutionEnvironment	
    env.setParallelism(1)	
    val kafkaConfig =newProperties();	
    kafkaConfig.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,"localhost:9092");	
    kafkaConfig.put(ConsumerConfig.GROUP_ID_CONFIG,"test1");	
    val consumer =newFlinkKafkaConsumer011[String]("topic1",newSimpleStringSchema(), kafkaConfig)	
    val orderStream = env.addSource(consumer)	
               .map(x =>{	
                      val a = x.split(",")	
                      Order(a(0), a(1).toLong, a(2), a(3).toDouble, a(4))	
                    })	
    val salesStream=orderStream.keyBy(x =>{	
                  x.areaId +"_"+ x.gdsId	
             }).process(newKeyedProcessFunction[String,Order,GdsSales](){	
      var orderState:ValueState[Double]= _	
      var orderStateDesc:ValueStateDescriptor[Double]= _	
     override def open(parameters:Configuration):Unit
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值