2014-06-20 22 views
7

Sto costruendo l'elaborazione in tempo reale per rilevare la frode transazione con carta ATM. per rilevare in modo efficiente le frodi, la logica richiede l'ultima data di transazione per carta, somma dell'importo della transazione per giorno (o le ultime 24 ore)Spark Streaming stato storico

Uno dei casi è se la transazione con carta al di fuori del paese nativo per più di 30 giorni dell'ultima transazione in quel paese quindi inviare l'avviso come possibile frode

Così provato a guardare Spark streaming come soluzione. Al fine di raggiungere questo obiettivo (probabilmente mi manca idea di programmazione funzionale) sotto è il mio codice 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(); 

Sono di fronte a due problemi qui

1) come utilizzare questa ultima data della transazione ulteriormente per confronto futuro dalla stessa carta
2) come mantenere i dati così anche se riavviare il programma di guida allora i vecchi valori di s2 ripristina indietro 3) updateStateByKey può essere utilizzato per mantenere lo stato storico?

Penso che mi manchi il punto chiave dello streaming spark/programmazione funzionale su come implementare questo tipo di logica.

+0

Totalmente perso sulla domanda qui, hai problemi a salvare i dati su un file – aaronman

+0

@aaronman potrebbe non essere così semplice in un ambiente distribuito con un lavoratore che cambia dinamicamente ;-) –

+0

@ om-nom-nom i ' Non è chiaro quale sia il problema, poiché il salvataggio di file in un contesto di streaming consente di salvare un file per ogni Dstream che si elabora senza troppi sforzi – aaronman

risposta

3

Se si utilizza Spark Streaming, non è necessario salvare il proprio stato su un file, soprattutto se si prevede di eseguire l'applicazione 24 ore su 24, 7 giorni su 7. Se questa non è la tua intenzione, probabilmente starai bene con un'applicazione Spark dato che stai affrontando solo il calcolo dei big data e non il calcolo dei lotti in tempo reale.

Sì, updateStateByKey può essere utilizzato per mantenere lo stato attraverso i vari lotti, ma ha una firma particolare, che si può vedere nella documentazione: http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.streaming.dstream.PairDStreamFunctions

Inoltre persistono() è solo una forma di caching, esso doesn in realtà mantengono i tuoi dati su disco (come su un file).

Spero di aver chiarito alcuni dei tuoi dubbi.

+2

C'è un modo per cancellare/ripristinare lo stato della chiave quando lo streaming è in esecuzione 24/7 .. la mia applicazione viene uccisa in un periodo di tempo .. come gestirlo? – mithra

Problemi correlati