我正在构建用于检测欺诈 ATM 卡交易的实时处理。为了有效地检测欺诈,逻辑需要通过卡的最后交易日期,每天(或过去 24 小时)的交易金额总和
用例之一是,如果在本国境外的卡交易超过该国家最后一次交易的 30 天,则发送警报作为可能的欺诈
因此试图将 Spark 流视为一种解决方案。为了实现这一点(可能我缺少关于函数式编程的想法),下面是我的伪代码
stream=ssc.receiverStream() //input receiver
s1=stream.mapToPair() // creates key with card and transaction date as value
s2=stream.reduceByKey() // applies reduce operation for last transaction date
s2.checkpoint(new Duration(1000));
s2.persist();
我在这里面临两个问题
1)如何进一步使用最后一个交易日期与同一张卡进行比较
2)如何保存数据,即使重新启动驱动程序,s2 的旧值也会恢复 3)updateStateByKey
可以用来维持历史状态?
我想我缺少火花流/函数式编程的关键点,即如何实现这种逻辑。