2015-04-28 27 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