gpt4 book ai didi

python - Pyspark MLlib 中的自定义算法 : 'function' object has no attribute '_input_kwargs'

转载 作者:行者123 更新时间:2023-11-30 22:33:18 26 4
gpt4 key购买 nike

我正在尝试在 Pyspark 中推出我自己的 MLlib Pipeline 算法,但无法克服以下错误:

'function' object has no attribute '_input_kwargs'

我已将代码简化为:

from pyspark import keyword_only
from pyspark.ml.param import Params

class SimpleAlgorithm(Params):

@keyword_only
def __init__(self, threshold=2.0):

super(SimpleAlgorithm, self).__init__()
kwargs = self.__init__._input_kwargs
self.setParams(**kwargs)

@keyword_only
def setParams(self, threshold=2.0):

kwargs = self.setParams._input_kwargs
return self._set(**kwargs)

但是当我这样做时:

test_alg = SimpleAlgorithm()

我收到上面显示的错误。有人知道我做错了什么吗? (我看到一个明显相关的问题 here 但是,作为一个 Python 新手,我不确定我是否理解了答案或者它是否与我相关。)

编辑如果有帮助的话,这里是在 Spark 2.1 Databricks 集群上运行错误后的完整堆栈跟踪:

----> 1 test_alg = SimpleAlgorithm()

/databricks/spark/python/pyspark/__init__.py in wrapper(self, *args, **kwargs)
99 raise TypeError("Method %s forces keyword arguments." % func.__name__)
100 self._input_kwargs = kwargs
--> 101 return func(self, **kwargs)
102 return wrapper
103

<ipython-input-12-dcb888c97487> in __init__(self, threshold)
8
9 #super(SimpleAlgorithm, self).__init__()
---> 10 kwargs = self.__init__._input_kwargs
11 self.setParams(**kwargs)
12

AttributeError: 'function' object has no attribute '_input_kwargs'

最佳答案

问题出在这一行:

kwargs = self.__init__._input_kwargs

您正在尝试访问 function 对象 self.__init__ 上的属性 _input_kwargs,该属性不存在。

如果您只是想设置threshold属性,我通常会这样做:

class SimpleAlgorithm(Params):

@keyword_only
def __init__(self, threshold=2.0):
super(SimpleAlgorithm, self).__init__()
self.threshold = threshold

编辑:

我检查了您链接的源代码,并注意到 keyword_only 包装器的实现从 Spark 2.1 更改为 Spark 2.2。您的代码确实应该适用于 Spark 2.1,但如果您使用 Spark 2.2,您应该将其替换为:

from pyspark import keyword_only
from pyspark.ml.param import Params

class SimpleAlgorithm(Params):

@keyword_only
def __init__(self, threshold=2.0):

super(SimpleAlgorithm, self).__init__()
kwargs = self._input_kwargs
self.setParams(**kwargs)

@keyword_only
def setParams(self, threshold=2.0):

kwargs = self._input_kwargs
return self._set(**kwargs)

Link to v2.2 keyword_only implementation

Link to v2.2 example usage

关于python - Pyspark MLlib 中的自定义算法 : 'function' object has no attribute '_input_kwargs' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45189191/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com