def reduce(self, f): #1 parameter
def func(iterator):
iterator = iter(iterator)
try:
initial = next(iterator)
except StopIteration:
return
yield reduce(f, iterator, initial) #3 parameter
vals = self.mapPartitions(func).collect()
if vals:
return reduce(f, vals) #2 parameter
raise ValueError("Can not reduce() empty RDD")
reduce函数只需要1个参数,但它提供2或3个参数.
我搜索整个python代码,没有任何其他关于reduce的定义.
解决方法:
reduce()有一种方法.它不在全局命名空间中;它只是类或实例的属性.当它调用reduce()时,它不是递归;它调用内置函数reduce().如果要调用此处定义的reduce(),则需要使用self.reduce(…).内置函数reduce()可以带两个或三个参数.如果给定两个,它将应用第一个参数,一个函数,带有两个参数:第二个参数的前两个元素,一个序列.然后它使用它返回的内容和序列中的第三个元素调用函数,并继续这样,直到序列耗尽.当给出第三个参数时,它作为第一个参数给出,序列中的第一个元素作为第二个参数给出.下一次,它是序列的返回和第二个元素,并从那里继续.