记录一下SparkStreaming中因为使用redis做数据验证而导致数据结果不对的问题

业务背景:

需要通过redis判断当前用户是否是新用户。当出现新用户后,会将该用户放入到redis中,以标明该用户已不是新用户啦。

出现问题:

发现入库时,并没有新用户入库,但我看了数据了,确实应该是有新数据

问题原因:

因为在判断新用户这一步是在flatmap这一步做的。

flatmap后的RDD,后边会被两个action使用。

问题是,因为是执行两次action时,flatmap也会执行两次。

而最终入库的代码是在第二个RDD中。结果就是永远不会存在最新用户啦

解决方案:

flatmap后,做一下cache,这样就不会多次执行flatmap