gpt4 book ai didi

java - Spark Streaming 历史状态

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:32:25 25 4
gpt4 key购买 nike

我正在构建用于检测欺诈 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 可以用来维护历史状态吗?

我想我错过了如何实现这种逻辑的 Spark 流/函数式编程的关键点。

最佳答案

如果您使用的是 Spark Streaming,则不应真正将状态保存在文件中,尤其是当您计划 24/7 全天候运行应用程序时。如果这不是您的意图,您可能只使用 Spark 应用程序就没问题,因为您只面临大数据计算,而不是实时批量计算。

是的,updateStateByKey 可用于在各个批处理中维护状态,但它具有您可以在文档中看到的特定签名: http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.streaming.dstream.PairDStreamFunctions

还有 persist() 它只是一种缓存形式,它实际上不会将您的数据持久保存在磁盘上(如文件)。

希望已经澄清了您的一些疑虑。

关于java - Spark Streaming 历史状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24331815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com