scala – 按名称获取已注册的Spark累加器
发布时间:2020-12-16 18:47:44 所属栏目:安全 来源:网络整理
导读:有没有办法按名称获取已注册的Spark累加器,而不传递实际参考?期望的行为: val cnt1 = sc.longAccumulator("cnt1")val cnt2 = something.getAccumulatorByName("cnt1") asInstanceOf[LongAccumulator]cnt1.add(1)cnt2.value // returns 1 谢谢 解决方法 Spa
有没有办法按名称获取已注册的Spark累加器,而不传递实际参考?期望的行为:
val cnt1 = sc.longAccumulator("cnt1") val cnt2 = something.getAccumulatorByName("cnt1") asInstanceOf[LongAccumulator] cnt1.add(1) cnt2.value // returns 1 谢谢 解决方法
Spark中的累加器保存在AccumulatorContext中,无法从中获取它们. Spark不允许你这样做,因为在你停止SparkContext之前不会保留累加器.他们实现了规范化映射:累加器被保留,直到你有强烈的引用它,并且一旦它们超出范围,GC就会清理它们(通过特殊的终结过程).
按名称获取累加器的唯一方法是将其放入Map中.如果您需要在FileFormat或RelationProvider中编写累加器,然后在驱动程序中读取它,只需保持对它的静态引用.如果你在同一个类中读取和写入累加器,并且想要按名称获取它们,则很可能需要在里面创建Map [String,Long]的自定义累加器.它在性能方面更有利可图. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |