我有一个火花作业,从不同的系统执行大量的映射,作为其中的一部分,它从远程api(使用缓存)获取一些数据。如果它到达缓存,一切都很好,如果不是它轰炸api(具有速率限制)。
我做过的一次尝试是过滤掉需要下载的部分,并单独运行下载。但是,我无法确定如何确保forEach运行,例如一个线程(或者最好有一些共享计数器,让我可以看到我在最后一分钟内发出了多少请求,看看是否有我达到了api限制)。
我可以通过设置自定义spark配置来实现,但之后我将不得不做两次过滤/映射。一旦确保完成所有下载,然后再次从缓存加载它们并继续解析。
答案 0 :(得分:-1)
有一些共享计数器,可以让我看到我在最后一分钟内发出了多少请求,看看我是否达到了api限制
答案是肯定的,请参阅pyspark文档中的共享变量。 Spark Programming Guide - Shared Variables