我有这个错误与火花流,我需要存储一个全局变量(如计数器)在各种执行程序中使用,只在驱动程序中增加。无法使用 Spark累加器,因为它们具有每个执行程序的本地上下文。我也尝试使用 spark caching ,但它只允许存储整个数据集,而不仅仅是整数变量。 BlockManager 可能是一个很好的解决方案,但是从spark提供的文档中很难理解任何东西。 我希望你能帮忙找到解决方案。
N.B:我在python中使用spark
答案 0 :(得分:0)
Spark提供了一个称为广播变量的东西来保存缓存数据。 Broadcast变量是只读高速缓存,每个执行者都拥有自己的副本。因此,其他执行程序看不到对其的任何更新。另外,请注意,广播对象不可序列化,并且必须是最终对象。因此,无法更新它。
一些简单的选项可以保存您的缓存数据:
我尝试过的一种对我有效的方法是定期重新广播缓存数据。请在How to weave a periodically changing cached-data with your streaming application上找到我的博客,以获取更多详细信息,在此我进行了演示以进行处理。希望它能为您提供有关如何在Spark中使用变化的缓存数据的观点。