我正在查看PySpark代码中的类pyspark.mllib.feature.IDFModel
at
我很困惑为什么这不会产生无限循环?
这是该类中的代码:
class IDFModel(JavaVectorTransformer):
def transform(self, x):
return JavaVectorTransformer.transform(self, x)
这是JavaVectorTransformer类的代码
class JavaVectorTransformer(JavaModelWrapper, VectorTransformer):
def transform(self, vector):
if isinstance(vector, RDD):
vector = vector.map(_convert_to_vector)
else:
vector = _convert_to_vector(vector)
return self.call("transform", vector)
IDFModel.transform()
调用JavaVectorTransformer.transform
,然后返回self.call("transform",vector)
奇怪的是,这似乎可以在不创建无限循环的情况下工作。
有什么想法吗?
答案 0 :(得分:1)
请参阅链接https://spark.apache.org/docs/1.5.0/api/python/_modules/pyspark/mllib/common.html
中的JavaModelWrapper代码self.call不是对同一方法的递归调用。在调用self.call时调用的父类JavaModelWrapper中有一个名为“call”的方法。