Python \ PysSpark代码:这不是一个无限循环吗?

时间:2016-03-15 18:22:36

标签: python infinite-loop pyspark

我正在查看PySpark代码中的类pyspark.mllib.feature.IDFModel

at

http://spark.apache.org/docs/latest/api/python/pyspark.mllib.html#pyspark.mllib.feature.IDFModel.transform

我很困惑为什么这不会产生无限循环?

这是该类中的代码:

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)

奇怪的是,这似乎可以在不创建无限循环的情况下工作。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

请参阅链接https://spark.apache.org/docs/1.5.0/api/python/_modules/pyspark/mllib/common.html

中的JavaModelWrapper代码

self.call不是对同一方法的递归调用。在调用self.call时调用的父类JavaModelWrapper中有一个名为“call”的方法。