使用Flink消费Kafka的dwd层数据,实时统计商城中销售量前3的商品,将key设置成top3itemamount存入Redis中(value使用String数据格式,value为前3的商品信息并且外层用[]包裹,其中按排序依次存放商品id:销售量,并用逗号分割)。使用redis cli以get key方式获取top3itemamount值。
改题目要求格式实例为:
top3itemamount:[1:700,42:500,41:100]
那么我们在实时计算中怎么把格式写成这样呢,如果直接这样写
res.append("[" + mapList(0)._1 + ":" + mapList(0)._2 + "," + mapList(1)._1 + ":" + mapList(1)._2 + "," + mapList(2)._1 + ":" + mapList(2)._2 + "]")
collector.collect(res.toString())
会导致索引越界(比如一开始进来第一条元素,mapList集合中只有一个元素,故无法取到索引为1,2的元素)
所以我们可以加上一个判断,判断这个mapList里是否有三个元素
if (mapList.indices.size>=3){
res.append("[" + mapList(0)._1 + ":" + mapList(0)._2 + "," + mapList(1)._1 + ":" + mapList(1)._2 + "," + mapList(2)._1 + ":" + mapList(2)._2 + "]")
}
collector.collect(res.toString())