Я хотел бы определить аккумулятор в pyspark, который имеет тип List
и накапливает строковые значения для рабочих узлов. Вот код, у меня есть:пользовательский класс аккумулятора в искры
class ListParam(AccumulatorParam):
def zero(self, v):
return []
def addInPlace(self, acc1, acc2):
acc1.extend(acc2)
return acc1
Я тогда определить аккумулятор такого типа, как показано ниже
accu = sc.accumulator([], ListParam())
, а затем добавить различные значения к нему в исполнителях следующим
accu.add("abc")
Я хотел бы, чтобы значение abc
отображалось как одно значение в аккумуляторе, но накопитель добавляет три разных значения (один символ pr), и когда я смотрю на accu
Значение в драйвере выглядит как ['a','b','c']
. Как я могу изменить его так, чтобы он не добавлял каждый символ в отдельную запись в накопителе?
-------------- редактировать ----------------
я определил другой пользовательский класс для моего аккумулятора следующим
class VectorAccumulatorParam(AccumulatorParam):
def zero(self, value):
return [0.0] * len(value)
def addInPlace(self, val1, val2):
for i in range(len(val1)):
val1[i] += val2[i]
return val1
и в работника у меня есть следующий код
global accu
accu += [accuracy]
, но когда я напечатать accu
в драйвере, он пуст. Ничего плохого?
Как использовать? –