需求:每隔5分钟统计最近1小时内的订单交易情况,要求显示城市、省
份、交易总金额、订单总数—增量统计
思路分析
- 从地域宽表里面读取dim_lagou_area的数据,使用flink批处理的接口,存储到list中
- 使用flink流处理API获取订单数据,把需要的字段封装在一个case class中
- 获得流数据,根据地域宽表的数据获得对应的省、市
- 使用aggregate算子和窗口函数+水印完成窗口统计
代码实现
package dws
import com.alibaba.fastjson.{
JSON, JSONObject}
import models.{
CityOrder, TableObject}
import myUtils.{
ConnHBase, SourceKafka}
import org.apache.flink.addons.hbase.TableInputFormat
import org.apache.flink.api.scala.ExecutionEnvironment
import org.apache.flink.streaming.api.scala.{
DataStream, StreamExecutionEnvironment}
import org.apache.flink.api.java.tuple
import org.apache.hadoop.hbase.client.{
Connection, HTable, Result, Scan, Table}
import org.apache.flink.api.scala._
import org.apache.flink.configuration.Configuration
import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer
import org.apache.hadoop.hbase.util.Bytes
import org.apache.hadoop.hbase.{
Cell, TableName}
import java.util
import org.apache.flink.api.common.functions.AggregateFunction
import org.apache.flink.streaming.api.scala.function.WindowFunction
import org.apache.flink.streaming.api.windowing.time.Time
import org.apache.flink.streaming.api.windowing.windows.TimeWindow
import org.apache.flink.util.Collector
import org.apache.flink.api.scala._
import scala.collection.mutable
//统计每隔5分钟最近1小时内的订单交易情况,显示城市、省份、交易总金额、订单总数
object OrderStatistics {
def main(args: Array[String]): Unit = {
//思路分析:
//1.从Hbase中拿出dim_lagou_area的信息
//2.对于datastream里面的数据,根据areai找到对应的城市和省份
val envSet:ExecutionEnvironment = ExecutionEnvironment.getExecutionEnvironment
val