Spark Streaming将多行数据以一行存储Redis

Spark Streaming将TOPK多行数据以一行存储Redis

使用redis hset存储 的问题

话不多说直接看代码,一般的思路都是用hset 计算topk的 key就是名称,value就是数量,详细代码如下
在这里插入图片描述

Q1:spark streaming在算Top10值时,Spark Streaming没有排序算子,因此需要使用Transformer算子实现RDD与DStream的混合操作
Q2:计算的Top10中对于多行数据存储Redis并且需要每次计算后的Top10整体更新,如果使用Redis hash set,如果本次计算结果的key在过去一次中不存在,将无法覆盖,具体问题看下图。
在这里插入图片描述
那么可能会问,那我每次存储的时候清空HSET,HDEL只能删除一堆key value 那么你需要删除整个 HSET,再重新插入,会很麻烦

本人解决方法

那么对于部分key无法更新,并且Hset不断增大,因此将计算Top10转为Json字符串以String存储到Redis,可以实现每一次批次的Top10完整更新。如图展示了数据转换流程图及代码实现。

在这里插入图片描述
详细代码实现如下图,因为json序列化后用tostring转string,直接用一行字符串set保存进去,不需要hset,而且每次都是更新的整个字符串不存在更新不完以及累加的问题。
如果对spark streaming有应用,理解的有点深入,或许能明白我的意思。
在这里插入图片描述

结果查看

Redis数据查看
在这里插入图片描述
使用python json模块查看原数据,用java也可以
在这里插入图片描述
总结:可能也有更好的方式,但是这种我认为我的方法更粗暴

如果有错误的问题,也希望大家能指正

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值