我正在构建用于检测欺诈ATM卡交易的实时处理。为了有效地检测欺诈,逻辑要求具有卡的最后交易日期,日期(或最后24小时)的交易金额的总和。Spark Streaming历史状态
用例之一是如果在本国以外的卡交易超过30天在该国的最后交易然后发送警报尽可能欺诈
因此,试图看看Spark流作为解决方案。 为了实现这一点(约函数式编程也许我缺少的想法)以下 是我psudo代码
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
可以用来保持历史状态?
我想我缺少火花流/功能编程的关键点,如何实现这种逻辑。
在这里完全丢失了这个问题,你是否无法将数据保存到一个文件 – aaronman
@aaronman它可能不是那么简单在分布式环境中动态变化的工人;-) –
@ om-nom-nom i' m只是不清楚问题所在,至于将文件保存在流式上下文中,spark可以让您为每个您处理的Dstream保存文件,而不需要太多的努力 – aaronman