在spark中加入Streaming数据与历史数据

时间:2015-04-28 06:41:51

标签: join apache-spark

假设我有交易数据和访问数据

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中的join函数在一个数据和非常大的历史数据之间进行连接是否可扩展? 历史数据是访问,因为访问可以是任何时间(例如访问是交易发生前一年)

2 个答案:

答案 0 :(得分:0)

我在项目中加入了历史数据和流数据。这里的问题是你必须在RDD中缓存历史数据,当流数据到来时,你可以进行连接操作。但实际上这是一个漫长的过程。

如果要更新历史数据,则必须保留两份副本并使用累加器一次处理任一副本,因此不会影响第二份副本。

例如,

transactionRDD是您在某个时间间隔运行的流rdd。 visitRDD是历史性的,每天更新一次。 所以你必须为visitRDD维护两个数据库。当您更新一个数据库时,transactionRDD可以使用visitRDD的缓存副本,当visitRDD更新时,您切换到该副本。实际上这很复杂。

答案 1 :(得分:0)

我知道这个问题很老,但是我同意我的观点。今天,这可以在Apache Beam中轻松完成。并且此作业可以在相同的Spark集群上运行。