一些背景:
如标题中所述,我想在python中编写一个类,该类将包装pyspark的TFIDF实现。 这个班有:
构造函数,它接受数据帧和inpuCol,然后根据给定数据帧的inputCol中的标记初始化CountVectorizerModel和IDFModel。
transform方法,该方法接受一个dataframe,inputCol和outputCol,并返回一个带有new列(具有给定outputCol名称)和tfidf向量的数据帧,该数据帧基于inputCol和构造函数中学习的(拟合的)模型。
我的问题:
为了实现我的目标并支持使用不同的列名转换任意数据框,我必须更改已安装的CountVectorizerModel的inputCol名称和已安装的IDFModel的outputCol。 但是,我无法在Spark 2.0.0上做到这一点:
class TFIDFVectorizer(object):
def __init__(self, df, inputCol, useHash=False, hashSize=None):
# init tf model
cv = CountVectorizer(inputCol=inputCol, outputCol="rawFeatures")
self._tfModel = cv.fit(df)
# init idf model
featurizedData = self._tfModel.transform(df)
idf = IDF(inputCol="rawFeatures", outputCol="features")
self._idfModel = idf.fit(featurizedData)
def transform(self, df, inputCol, outputCol):
# apply TF
tfData = self._tfModel.transform(df, params={self._tfModel.inputCol : inputCol})
# aplly IDF
tfidfData = self._idfModel.transform(tfData, params={self._idfModel.outputCol : outputCol})
tfidfData = tfidfData.drop("rawFeatures")
return tfidfData
我得到一个例外:CountVectorizerModel has no attribute 'inputCol'.
在以后的Spark版本中,它可以完美运行,您知道为什么吗?
谢谢。
答案 0 :(得分:0)
您没有在引号中输入inputCol。通过'inputCol'更改inputCol