踩坑背景
流程如下所示:
1.使用SparkSQL获取到了一个DataFrame;
2.然后map这个DataFrame,调用GET接口,获得了IDs作为一个新的DatdaFrame;
3.最后再map这个DataFrame,在map中调用Post接口,将最终结果放到接口中。
踩坑原因
因为比较懒,所以在spark-submit的时候,脚本直接复制了另外一个Spark作业的提交脚本,但是万万没想到的是:这个脚本里,有一句设置:--conf "spark.speculation=true"
,当时没注意,直接提交上去了。
后来反馈最终的Post接口存在重复调用的问题,有的name会调用两次post接口,有的则只会调用一次。
解决
最后通过咨询大佬得知,在严格执行只能计算一次时,一定要把Spark的检测执行关掉!也就是说,不要在代码或者脚本里设置spark.speculation=true
,此配置Spark默认为false。