java - Spark 在执行器上增量更新变量
问题描述
情况: 在 rdd.mapPartitions 操作期间,我需要访问一些由驱动程序从数据库加载的通用数据(我们称之为拓扑,因为它是)。
每个批次的执行者都可以在这个拓扑对象中更新/插入,最后将直接写入数据库。这不是操作的结果,只是一些属性。
在每个批次之后,驱动程序从数据库中获取新数据,然后我们再次开始一个新批次。
问题: 在某些情况下,反序列化时间很长,并且随着拓扑中元素的增加而增加。
我尝试了什么: 出于这个原因,我用广播实现了我们的拓扑版本,但是当所有批次都发生修改时,这个解决方案是无用的,因为它必须在每批次广播整个对象,而不是只广播几个修改。
问题: 我即将用缓存替换广播,并在每个执行器的批次开始时获取新数据,因为我们可以在一个项目中同时拥有 40 个执行器。我不太喜欢这种解决方案,因为它会增加数据库的压力。我想要一个可以增量更新的广播。
spark是否实现了这样的功能?有可能自己做吗?
解决方案
推荐阅读
- python - 503 从插件获取元数据失败并出现错误:HTTPSConnectionPool(host='oauth2.googleapis.com', port=443)
- powershell - 使用 Powershell 实现 Netscaler 自动化
- google-sheets - 如何使用条件进行 Vlookup
- scala - Cassandra 中的并行性使用 Scala 读取
- python - 删除由 altair 生成的 vegaEmbed geoshape 周围的边框?
- sql - SQL:DELETE、SELECT 和 LEFT JOIN - 我可以这样做吗?
- r - 使图表在 R 笔记本中可发现
- reactjs - React table - 添加过滤器按钮以过滤表行
- sql-server - 在一个查询中运行 equals 和 isnull 语句
- javascript - 如何通过Firebase数据库在html中生成带有li的ArrayList