首页 > 解决方案 > Spark 在执行器上增量更新变量

问题描述

情况: 在 rdd.mapPartitions 操作期间,我需要访问一些由驱动程序从数据库加载的通用数据(我们称之为拓扑,因为它是)。

每个批次的执行者都可以在这个拓扑对象中更新/插入,最后将直接写入数据库。这不是操作的结果,只是一些属性。

在每个批次之后,驱动程序从数据库中获取新数据,然后我们再次开始一个新批次。

问题: 在某些情况下,反序列化时间很长,并且随着拓扑中元素的增加而增加。

我尝试了什么: 出于这个原因,我用广播实现了我们的拓扑版本,但是当所有批次都发生修改时,这个解决方案是无用的,因为它必须在每批次广播整个对象,而不是只广播几个修改。

问题: 我即将用缓存替换广播,并在每个执行器的批次开始时获取新数据,因为我们可以在一个项目中同时拥有 40 个执行器。我不太喜欢这种解决方案,因为它会增加数据库的压力。我想要一个可以增量更新的广播。

spark是否实现了这样的功能?有可能自己做吗?

标签: javascalaapache-spark

解决方案


推荐阅读