2015-04-28 47 views
3

讓說,我有交易數據和訪問數據火花流數據的銜接VS歷史數據

visit 
| userId | Visit source | Timestamp | 
| A  | google ads | 1   | 
| A  | facebook ads | 2   | 

transaction 
| userId | total price | timestamp | 
| A  | 100   | 248384 | 
| B  | 200   | 43298739 | 

我想加入的交易數據和訪問數據,做銷售的歸屬。我希望在事務發生時(流式傳輸)實時進行。

在spark中使用連接函數可以在一個數據和非常大的歷史數據之間進行連接嗎? 歷史數據是訪問,因爲訪問可以隨時(例如訪問是在交易發生前一年)

+0

您的交易數據多久更新一次? –

+0

交易數據將被實時處理。如果你的意思是記錄,它永遠不會更新(最終交易) – rendybjunior

+0

對不起。 Meant更新爲添加記錄時未更新的記錄。 –

回答

0

我在我的項目中加入了歷史數據和流式數據。這裏的問題是,你必須緩存RDD中的歷史數據,並且當數據流來臨時,你可以進行連接操作。但實際上這是一個漫長的過程。

如果您正在更新歷史數據,那麼您必須保留兩個副本並使用累加器一次處理任一副本,因此它不會影響第二個副本。

例如,

transactionRDD是你在一些間隔運行流RDD。 visitRDD這是歷史的,你每天更新一次。 所以你必須爲visitRDD維護兩個數據庫。當您更新一個數據庫時,transactionRDD可以使用visitRDD的緩存副本,並在visitRDD更新時切換到該副本。其實這很複雜。

+0

如何加入JavaPairDStream和JavaPairRDD?這是批量數據實時數據 – sahu

+0

@sahu您需要使用JavaPairDStream的transformToPair函數來加入JavaPairDStream和JavaPairRDD。 –

+0

我明白了,但是歷史數據並未實時更新,它可能會定期更新,但速度不夠快。 – rendybjunior