Python 无法在Pyspark中的rdd上运行字典类型的累加器
此脚本创建一个累加器Python 无法在Pyspark中的rdd上运行字典类型的累加器,python,apache-spark,pyspark,rdd,Python,Apache Spark,Pyspark,Rdd,此脚本创建一个累加器accumulate\u dict。它似乎工作正常,例如:inc(“foo”)后跟inc(“foo”)将累加器更新为累加器。但是,当我运行在rdd上运行它的最后一行时,它失败了,错误是:File“”,第6行,在AddInSpace中 TypeError:无法损坏的类型:“dict”。PySpark是否尝试以某种方式散列累加器?如何使用累加器更新此词典 from pyspark import AccumulatorParam, SparkContext rdd = sc.pa
accumulate\u dict
。它似乎工作正常,例如:inc(“foo”)
后跟inc(“foo”)
将累加器更新为累加器。但是,当我运行在rdd上运行它的最后一行时,它失败了,错误是:File“”,第6行,在AddInSpace中
TypeError:无法损坏的类型:“dict”
。PySpark是否尝试以某种方式散列累加器?如何使用累加器更新此词典
from pyspark import AccumulatorParam, SparkContext
rdd = sc.parallelize(["foo", "bar", "foo", "foo", "bar"])
class SAP(AccumulatorParam):
def zero(self, value):
return value.copy()
def addInPlace(self, v1, v2):
v3 = dict(v1)
v3[v2] = v3.get(v2, 0) + 1
return v3
accumulate_dict = sc.accumulator({}, SAP())
def inc(x):
global test
test += x
rdd.foreach(inc)
参考文献:
这不是累加器的工作方式AccumeratorParam.addInPlace
def addInPlace(self,value1:T,value2:T)->T:…
(参数和返回类型必须相同-这是一种类似于reduce的操作)。请参阅。您链接到的带有计数器的解决方案非常适合我的要求。非常感谢,我确实在字典中尝试过,但我会再试一次,并用那个片段更新我的问题