ML库中转换中使用的Spark累加器



我读到Spark累加器应该只在操作中使用,而不应该在转换中使用,因为Spark只能保证add方法在操作中被调用一次。

然而,例如,通过查看Apache Spark repo中高斯混合的实现,我可以在trainImpl方法中看到logLikelihoodAccum用于mapPartition转换。

我的问题是:这样做有多糟糕?我还想在转换中使用累加器,我想首先评估风险。

我认为您已经错过了Spark中的Accumulators(Transformations&Actions(的要点。Spark仅在Action被调用而非实现时才保证Accumulator的使用。也就是说,您应该在转换中实现您的累加器用法(这是使用Acc、btw的唯一方法(,然后通过使用Action(Action是您的催化剂(调用RDD/DS链(RDD/DS chain=T+T+…T+a(。

"Spark只能保证add方法在一个动作中被调用一次;具有误导性,尤其是";正在行动中";。你不能增强火花行动,它们是静态的。您只能增强变换(其中一些(。

为了回答您的问题:在转换中使用Accumulator(然后触发它来调用它(是完全安全的(从优化角度来看(。

最新更新