アキュムレータをタイプList
のpysparkに定義し、ワーカーノードの文字列値を蓄積したいとします。ここで私が持っているコードは:スパークのカスタムアキュムレータクラス
class ListParam(AccumulatorParam):
def zero(self, v):
return []
def addInPlace(self, acc1, acc2):
acc1.extend(acc2)
return acc1
I次いで
accu = sc.accumulator([], ListParam())
以下のように、このタイプのアキュムレータを定義し
accu.add("abc")
を次のようにエグゼキュータでそれに異なる値を追加します値abc
をアキュムレータ内の1つの値として表示したいのですが、アキュムレータは3つの異なる値(1つの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
を印刷するとき、それが空です。何か間違っている?
どのように使用されますか? –