Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法在Pyspark中的rdd上运行字典类型的累加器_Python_Apache Spark_Pyspark_Rdd - Fatal编程技术网

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的操作)。请参阅。您链接到的带有计数器的解决方案非常适合我的要求。非常感谢,我确实在字典中尝试过,但我会再试一次,并用那个片段更新我的问题