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()
可以采用两个或三个参数。如果给定两个,它将应用第一个参数,一个函数,有两个参数:第二个参数的前两个元素,一个序列。然后它用返回的内容和序列中的第三个元素调用该函数,并继续这样直到序列耗尽。当给出第三个参数时,它作为第一个参数给出,序列中的第一个元素作为第二个参数给出。下一次,返回序列中的那个元素和第二个元素,并从那里继续。
关于python - pyspark reduce 方法的歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35970946/