У меня проблема с использованием аккумуляторов в Spark. Как видно на веб-сайте Spark, если вы хотите настраивать аккумуляторы, вы можете просто расширить (с помощью объекта) значение AccumulatorParam
. Проблема заключается в том, что я хочу, но не могу, сделать этот объект универсальным, например, как это:Spark AccumulatorParam Общие параметры
object SeqAccumulatorParam[B] extends AccumulatorParam[Seq[B]] {
override def zero(initialValue: Seq[B]): Seq[B] = Seq[B]()
override def addInPlace(s1: Seq[B], s2: Seq[B]): Seq[B] = s1 ++ s2
}
Но это дает мне ошибку компиляции, потому что объекты не могут использовать общие параметры. Моя ситуация не действительно Позвольте мне определить SeqAccumulatorParam
для каждого заданного типа, так как это приведет к большому количеству уродливого дублирования кода.
У меня есть альтернативный метод, просто поместив все результаты в RDD
, а затем перейдя через них с помощью аккумулятора, определенного для этого единственного типа, но это было бы намного приятнее.
Мой вопрос: есть ли другой способ создания аккумуляторов?