Spark-将结构化流与文件中随机更新的数据集结合在一起

时间:2018-06-28 13:31:18

标签: apache-spark join watermark spark-structured-streaming windowing

我有一个流,其中需要使用事件时间窗口,水印进行聚合,并且还希望通过联接将其与其他一些数据集一起进行充实。这些丰富的数据集来自文件,并且会随机更新/添加(当说“随机”时,我的意思是它们不会定期更新/刷新)。

比方说,我的主流A具有字段(时间戳,item_id,值)。 为简便起见,假设我有1个参考数据集:B,其中包含字段(时间戳,item_id,item_name)。 在A中,对于每个项目,我每小时都会定期收到新数据。但是,B包含管理数据,因此有时一天两次更新,但有时每周一次。 要求是一旦有新数据传入A,就对A.value进行汇总,并使用B.item_name对其进行充实。

我尝试了一些方法,但都失败了:

方法1 :使用Stateful MapGroupWithState将B保持为映射数据集<<<这是不可能的,因为在写出数据时我需要“更新”模式,并且在做之前我还需要进行汇总MapGroupWithState(在MapGroupWithState之后我还没有弄清楚怎么做)

方法2 :根据时间戳从B获取最新数据,例如:

val B_latest = B.filter($"d_time" = B.agg(max("d_time")).take(1)(0).get(0))
A.join(B_latest, Seq("item_id"), "inner")

但是我得到了 AnalysisException:必须使用writeStream.start()执行带有流源的查询,我猜这是由agg_max函数引起的。

对此有什么解决办法吗?

非常感谢。

0 个答案:

没有答案