AccumulatorV2不生效的问题排查

在Spark作业中使用AccumulatorV2自定义了一个字符串累加器,但是累加器在作业执行中不生效。

问题可能原因:

1、累加器本身定义的有问题;

2、Spark作业执行流程的原因;

问题排查情况:

1、通过一个自定义累加器类单测,只能证明了累加器自身类定义的正确性,但还不能证明累加器进入SparkContext执行的正确性;

2、通过另外一个单测,在原累加器的基础上再添加一个LongAccumulator累加器,同时执行自定义小数据的累加操作,结果显示LongAccumulator正确累加,原来的自定义累加器依然是初始值。这个单测证明,Spark上下文的执行是没有问题的,是自定义累加器的问题,此时可能是累加器本身有问题,或者是累加器注册到SparkContext有问题;

综上,就来对比排查以下两种情况:

1、累加器的注册是否正确;

2、累加器自身类定义是否有问题;

第二轮排查:通过和一个博客示例的特别简易AccumulatorV2实现的层层逼近和交叉验证,基本锁定是我的自定义累加器中的Merge函数定义有问题,必须先转换类型取得数据再赋值。

参考链接:https://blog.csdn.net/Winner941112/article/details/80986119?utm_source=blogxgwz9

原文地址:https://www.cnblogs.com/renyang/p/12604971.html