首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何利用星星之火、缓存或BlockManager中的全局变量?

如何利用星星之火、缓存或BlockManager中的全局变量?
EN

Stack Overflow用户
提问于 2018-03-07 12:12:13
回答 1查看 525关注 0票数 0

我在火花流方面有这个错误,我需要存储一个全局变量(如计数器),以便在各种执行器中使用,这个变量只会在驱动程序中增加。不能使用火花累加器,因为每个执行器都有本地上下文。我也尝试过使用火花缓存,但它只允许存储整个数据集,而不仅仅是一个整数变量。BlockManager可能是一个很好的解决方案,但是从spark提供的文档来看,很难理解任何东西。我希望你能帮我找到解决办法。

注:我用火花和python

EN

回答 1

Stack Overflow用户

发布于 2018-07-22 15:52:06

Spark提供了一个叫做广播变量的东西来保存高速缓存数据。广播变量是只读缓存,每个执行者都在其中保存自己的副本。因此,对它的任何更新对其他执行者都是不可见的。另外,请注意,广播对象不是可序列化的,必须是最终对象。所以,我们不能更新它。

保存缓存数据的一些简单的选项:

  1. 每次缓存数据发生变化时,使用一个新的广播变量重新启动星火上下文。
  2. 将缓存的数据保存在REST之后,并通过foreachRDD或forEachPartition进行查找。

我尝试并为我设计的一种方法是周期性地重新广播缓存数据。请查看我在如何使用流应用程序编制周期性更改的缓存数据。上的博客,了解更多的细节,我给出了一个演示来处理这个问题。希望它能给你一个关于如何在火花中使用变化的缓存数据的视角。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49151668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档