Spark 中流数据与历史数据之间的连接

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

最佳答案

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

如果你要更新历史数据,那么你必须保留两个副本,并使用累加器同时处理其中一个副本,这样就不会影响第二个副本。

例如,

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

关于Spark 中流数据与历史数据之间的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29912092/

相关文章:

php - Elasticsearch "Join"表

MySQL JOIN 多个表,每个结果按日期时间限制最后一个表

sql - 在子查询中使用 DISTINCT 时如何重写子查询以使用连接?

mysql - 计算组中用户的成员资格

apache-spark - 如何在特定位置向 PySpark 数据框添加多个空列

hadoop - 带有自定义 Hadoop 文件系统的 Spark

sql - SQL-兴趣之间的计算重叠

java - 编译 Spark 类时出现 "Eclipse Plugin for Scala"错误

azure - Spark - 如何从数据帧列中获取带有父文件夹的文件名

r - 如何在 R 中读取 Parquet 并将其转换为 R DataFrame?