2014-06-20 13 views
7

Ich bin Echtzeit-Verarbeitung für die Erkennung von Betrug ATM-Karte Transaktion. Um Betrug effizient zu erkennen, benötigt die Logik das letzte Transaktionsdatum pro Karte, die Summe der Transaktionsmenge nach Tag (oder letzten 24 Stunden) der letzten Transaktion in diesem Land dann Alarm als möglichem Betrug sendenSpark Streaming historischen Zustand

So versuchte Spark-Streaming als eine Lösung zu betrachten. Um diese zu erreichen (wahrscheinlich fehlt mir Idee über funktionale Programmierung) unten ist mein psudo Code

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(); 

Ich bin vor zwei Problem hier

1), wie diese letzte Transaktionsdatum zu verwenden, weiter zu zukünftiger Vergleich von der gleichen Karte
2) wie man Daten so behält, selbst wenn Antriebsprogramm wieder anstellt dann alte Werte von s2 stellt zurück 3) updateStateByKey kann benutzt werden, um historischen Zustand beizubehalten?

Ich denke, ich fehlt Schlüsselpunkt des Funken Streaming/funktionale Programmierung, wie diese Art von Logik zu implementieren.

+0

Total verloren auf die Frage hier, haben Sie Probleme beim Speichern der Daten in einer Datei – aaronman

+0

@Aaronman es kann nicht so einfach sein in einer verteilten Umgebung mit einem sich dynamisch ändernden Arbeiter ;-) –

+0

@ om-nom-nom i ' Ich bin einfach nicht klar, was das Problem ist, wie zum Speichern von Dateien in einem Streamkontext Funke können Sie eine Datei für jeden Stream, den Sie ohne zu viel Aufwand – aaronman

Antwort

3

Wenn Sie Spark Streaming verwenden, sollten Sie Ihren Status nicht wirklich in einer Datei speichern, vor allem wenn Sie planen, Ihre Anwendung rund um die Uhr auszuführen. Wenn dies nicht Ihre Absicht ist, werden Sie wahrscheinlich nur mit einer Spark-Anwendung in Ordnung sein, da Sie sich nur mit Big-Data-Berechnungen konfrontiert sehen und nicht mit Batch-Berechnungen in Echtzeit.

Ja, updateStateByKey verwendet werden Zustand durch die verschiedenen Chargen zu halten, aber es hat eine bestimmte Signatur, die Sie in der Dokumentation sehen: http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.streaming.dstream.PairDStreamFunctions

auch anhalten() es ist nur eine Form von Caching, es doesn Ihre Daten werden nicht auf der Festplatte gespeichert (wie bei einer Datei).

Ich hoffe, einige Ihrer Zweifel geklärt zu haben.

+2

Gibt es eine Möglichkeit, den Zustand des Schlüssels zu löschen/zurücksetzen, wenn das Streaming 24/7 läuft. Meine Anwendung wird über einen bestimmten Zeitraum gelöscht. Wie geht man damit um? – mithra