【发布时间】:2018-01-16 04:54:11
【问题描述】:
我必须内连接从 Oracle 中提取的两个关系表。
实际上,我想执行 1 对 1 连接,以便每个主键获取一行,并从第二个表中聚合列表值。因此,在加入 1 对 1 两个表之前,我必须通过键将所有行减少为 1,并将值保留在列表中。
这是我需要的说明: [![表聚合][1]][1]
在这里我遇到了一个问题,即何时停止对我的密钥进行聚合并将聚合实体传递到下一步。 Spark 通过为迟到的数据提供窗口间隔和造水来提供解决方案。因此保持数据一致性的假设是它接收数据的时间。它对于无限数据集是可行且适用的,但在我的情况下,我完全知道每个键的聚合计数。例如,对于 customer_id 1000,我确切地知道只有 3 种产品,并且在我聚合 3 种产品之后,我知道我现在可以停止聚合并进入管道中的下一个流式处理步骤。如何使用 Spark 和流式传输来实现此解决方案?我知道有 reduceByKeyAndWindow 操作,但在我的情况下,我需要 reduceByKeyAndWindowByCount 之类的东西。
计数将存储在静态数据集中,或者简单地将其存储在一行中作为附加数据。
【问题讨论】:
标签: apache-spark-sql spark-streaming reduce apache-spark-dataset